我想在查询中自动将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
答案 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,'"','""') + ...