从 SQL Server 查询结果中删除列标题

问题描述 投票:0回答:8

我想从 SQL Server 查询输出中删除列标题。我进行了搜索但没有找到任何解决方案。我有一个疑问,例如。

select cc.DepartmentID , cc.Name  from HumanResources.Department cc

当我运行此查询时,我得到这样的输出。

ID  Name
12  Document Control
1   Engineering
16  Executive
14  Facilities and Maintenance
10  Finance
9   Human Resources

我想从 SQL Server 的输出中删除 ID 和名称(列标题)。

我将通过脚本运行此查询以生成 csv 文件。

编辑:

当我通过脚本运行查询时,我得到了 csv 文件作为输出,它看起来像这样。

#TYPE System.Data.DataRow           
ID  Name    

更新:

我正在放置 powershell 脚本。

$Database = "temp"
$Server = "localhost"

$AttachmentPath = "output.csv"


# Connect to SQL and query data, extract data to SQL Adapter

$SqlQuery = "select cc.DepartmentID , cc.Name  from HumanResources.Department cc"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$nRecs = $SqlAdapter.Fill($DataSet)
$nRecs | Out-Null

#Populate Hash Table

$objTable = $DataSet.Tables[0]

#Export Hash Table to CSV File

$objTable | Export-CSV $AttachmentPath

我想从输出中删除列标题。

sql-server sql-server-2008 powershell sqlcmd
8个回答
13
投票

在 SSMS 中,在“工具/选项/查询结果/SQL Server/结果到文本”下,有一个“在结果集中包含列标题”复选框。结果与网格类似。

如果您通过 powershell 使用 sqlcmd,则可以使用 /h-1 禁用标头。

此设置对应于环境变量 SQLCMDHEADERS。

提示和技巧

使用值 -1 指定不应出现任何标头 打印。如果提供 -1,则之间不能有空格 参数和设置,即-h-1。否则,SQLCMD 解释为 它作为一个单独的选项并且失败了。

示例(修改自[TechNet])1

sqlcmd -q /h-1 "SELECT * FROM AdventureWorks2012.Person.Person"

还将与

-h-1

合作

4
投票

在 Management Studio 的查询窗口中右键单击并选择查询选项。在左侧的树中查找“结果”>“文本”,然后选中“在结果集中包含列标题”选项。我认为 Hamlet Hakobyan 是对的,是客户端添加了列标题。


2
投票

将最后一行

$objTable | Export-CSV $AttachmentPath
替换为

$objTable | ConvertTo-Csv -NoTypeInformation | select -Skip 1 | out-file $AttachmentPath

0
投票

使用“另存为”选项不会包含属性(列)名称。


0
投票

此工作正常,并且输出文件中不存在列标题:

$workpath = "C:\myworkdir"
$InvSQLParams = @{
    ServerInstance = "SQL2016"
    Database       = "testdb"
    InputFile      = "$($workpath)\selectclause.sql"
}
Invoke-Sqlcmd @InvSQLParams | ConvertTo-Csv -NoTypeInformation | select -Skip 1 | out-file "$($workpath)\result.csv"

0
投票

在 SQL Server Management Studio (SSMS) 中,没有直接命令可以在执行查询时抑制列标题。但是,您可以通过使用命令行工具或脚本语言来执行查询并生成不带标题的 CSV 文件来实现此目的。

例如,如果您在 Windows 环境中使用

sqlcmd
,则可以执行 SQL 查询并将输出重定向到不带列标题的文件。这是一个例子:

sqlcmd -S your_server_name -d your_database_name -E -s "," -W -Q "SET NOCOUNT ON; select cc.DepartmentID , cc.Name from HumanResources.Department cc" -o output.csv

所用标志的解释:

  • -S
    :服务器名称
  • -d
    :数据库名称
  • -E
    :使用可信连接(Windows 身份验证)
  • -s ","
    :指定列分隔符(在本例中为 CSV 的逗号)
  • -W
    :删除尾随空格
  • -Q
    :要执行的查询
  • -o
    :输出文件

另一种方法涉及使用 PowerShell 或其他脚本语言来执行 SQL 查询并操作输出。这是一个 PowerShell 示例:

$Server = "your_server_name"
$Database = "your_database_name"
$Query = "select cc.DepartmentID , cc.Name from HumanResources.Department cc"

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $Server; Database = $Database; Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $Query
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$DataSet.Tables[0] | Export-Csv -Path "output.csv" -NoTypeInformation

此 PowerShell 脚本执行查询、检索数据,并使用带有

Export-Csv
参数的
-NoTypeInformation
cmdlet 将其导出到不带列标题的 CSV 文件。

请记住将

your_server_name
your_database_name
替换为适合您环境的值。

这两种方法都旨在执行查询并生成 CSV 文件,而不在输出中包含列标题。


-1
投票

在脚本中,将输出通过管道 (|) 发送到“tail +3”命令。 这将跳过 SQL 的前 2 行输出。


-1
投票

连接数据库后设置 出发

© www.soinside.com 2019 - 2024. All rights reserved.