我有一个查询,我通过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的解决方案。 任何想法?
答案 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;