使用SQLCMD.EXE导出CSV数据

Tim*_*ain 11 sql-server csv sqlcmd

我正在尝试将数据从SQL Server导出为CSV格式.我有一个蝙蝠任务来执行此操作,定期运行.命令是:

SQLCMD.EXE -d [db details] -i c:\export.sql -o c:\export.csv -s"," -W 
Run Code Online (Sandbox Code Playgroud)

SQL文件只是视图中的SELECT*.

除了某些行在数据中包含逗号之外,这是有效的,因此需要引用这些值.我可以将列分隔符更改为"','",但是我还需要SQL Server来转义数据中的单引号.

不幸的是,将分隔符更改为另一个字符不太可能在100%的情况下解决问题,因为其中一个字段包含来自另一个包含各种怪异和奇妙字符的应用程序的序列化数据.

有没有办法让我获得标准的引用CSV数据?

Joe*_*lli 11

您应该能够修改SELECT语句以使用QUOTENAME函数.当然,您必须单独列出所有列而不是使用SELECT *.

注意:屏幕上可能难以阅读,但QUOTENAME的第二个参数是:

{single quote} {double quote} {single quote}

SELECT QUOTENAME(Column1, '"'), QUOTENAME(Column2, '"')
    FROM YourView
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`QUOTENAME`限制为128个字符.大于128个字符的输入返回NULL,这使得它对于较长的文本无效. (3认同)
  • 在批处理文件中,就像这样的魅力(启用延迟扩展,并用双引号转义“字符”):SELECT QUOTENAME(FieldName, '""'), .... (2认同)