来自Windows批处理+ sqlcmd的csv输出仅返回第一列

时间:2014-02-01 01:25:07

标签: sql-server batch-file csv sqlcmd

我已经浏览了整个互联网,似乎找不到解决这个问题的方法。

我试图通过使用sqlcmd和windows批处理的组合将查询结果输出为CSV。这是我到目前为止所做的:

sqlcmd.exe -S %DBSERVER% -U %DBUSER% -P %DBPASS% -d %USERPREFIX%  -Q "SELECT Username, UserDOB, UserGender FROM TABLE" -o %USERDATA%\%USERPREFIX%\FACT_BP.CSV -h-1 -s","

这里有什么我想念的吗?某些设置只查看查询结果的第一列?

任何建议都将是一个巨大的帮助 - 我迷失了。

1 个答案:

答案 0 :(得分:0)

以下是MSQ在SQLCMD上的参考页面。

http://technet.microsoft.com/en-us/library/ms162773.aspx

我将此命令放在C:\ temp中的批处理文件中,作为go.bat。

sqlcmd -S(local) -E -dmaster 
  -Q"select cast(name as varchar(16)), str(database_id,1,0), create_date from sys.databases" 
  -oc:\temp\sys.databases.csv -h-1 -s,

注意我硬编码了文件名并删除了字段分隔符周围的“”。

我得到了预期的输出。

enter image description here

命令不喜欢系统变量或其他错误。请尝试我的代码作为基线测试。它适用于SQL 2012。

此外,行数始终转储到文件中。您必须清除文件中的内容。这就是为什么我不将SQLCMD用于ETL。

为什么不使用BCP?

我在网站上写了几篇文章。

http://craftydba.com/?p=1584