如何使用-y标志获取SQLCMD标头和数据

时间:2016-07-03 12:35:46

标签: sql-server sqlcmd

我有一个查询,我通过SQLCMD在我的SQL Server数据库上运行。为了获得没有任何数据限制的长文本字段,我使用了-y0标记。

不幸的是,当使用-y0标志时,我的查询标题消失了,查询只返回数据。我也希望从查询中收到标题。

鉴于查询是select * from sales;,我想做类似的事情:

sqlcmd -Q "select top 0 * from (select * from sales) as _; select * from sales;" -y0 -S "127.0.0.1,1433" -o output_file.csv

为了对标题运行一个查询而对数据运行另一个查询,但-y0标志会影响第一个查询

我想找到一个只涉及一次执行sqlcmd的解决方案。 任何想法?

1 个答案:

答案 0 :(得分:0)

您在第一个查询中执行的操作的典型方法是使WHERE子句始终为false:

WHERE 1 = 0

但我不知道这是否会影响-y0

如果你执行两次,你可以这样做:

sqlcmd -Q "select * from sales where 1 = 0;" -S "127.0.0.1,1433" -o output_file_hdr.csv
sqlcmd -Q "select * from sales;" -y0 -S "127.0.0.1,1433" -o output_file_data.csv
copy /A output_file_hdr.csv + output_file_data.csv output_file.csv
del output_file_hdr.csv
del output_file_data.csv

但就个人而言,如果Invoke-Sqlcmd行为不端,我可能会使用PowerShell' sqlcmd.exe

Invoke-SqlCmd -Server '127.0.0.1' -Database $Database -MaxCharLength ([int32]::MaxValue) `
    -Query "select * from sales;" | `
    Export-Csv -NoTypeInformation -Path output_file.csv;