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

问题描述:

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

不幸的是,当使用-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标志影响第一查询as

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

为你在第一个查询做什么,典型的方法是使WHERE子句始终为假:

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 

就个人而言,虽然,我可能会使用PowerShell的Invoke-Sqlcmd如果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;