如何在查询中自动将SQL表导出到CSV文件?

时间:2019-04-29 09:16:01

标签: sql-server tsql bcp

我想在查询中自动将SQL表导出到CSV文件。我已经完成了将SQL表导出到.CSV的操作,但是输出是TAB分隔的文件,并且没有列标题。 如何使输出逗号分隔并带有列标题?

请参阅下面的查询,但该查询没有逗号分隔符和列标题。


DECLARE @cmd NVARCHAR(4000)
DECLARE @pathAndFileName NVARCHAR(MAX)
DECLARE @result INT
SET @pathAndFileName = 'C:\test.csv'
SET @cmd = 'bcp " SELECT * from  testdb.dbo.test_table " queryout "'
  + @pathAndFileName + '" -w -T -t -S Servername\SQLExpress; '       
EXEC @result = xp_cmdshell @cmd 
SELECT @result

1 个答案:

答案 0 :(得分:2)

使用-t(默认情况下是制表符(\t)时,您需要指定字段终止符。由于尚未指定,所以使用默认值:

SET @cmd = 'bcp " SELECT * from  testdb.dbo.test_table " queryout "'
         + @pathAndFileName + '" -w -T -t "," -S Servername\SQLExpress; ';

但是,我强烈建议不要串联@pathAndFileName的原始值,尤其是当它是nvarchar(MAX)时。您所拥有的可以轻松注入。

如果@pathAndFileName的值始终小于或等于128个字符,则我将@pathAndFileName声明为sysname,然后使用...+ QUOTENAME(@pathAndFileName,'"') + ...。如果长度可能超过128个字符,则需要自己将其引用:

... + REPLACE(@pathAndFileName,'"','""') + ...