问题描述
在使用SQL查询使用CSV
将表中的数据导出为sqlCMD
文件格式时遇到问题。问题在于包含特殊字符(例如摄氏度(°
)或®
的数据。输出将被转换为另一个值,例如ø
。请找到我正在使用的以下查询字符串。
EXEC xp_cmdshell 'sqlcmd -s,-W -Q "set nocount on; select * from ##XMLData_Output ORDER BY SKU_NUMBER" | findstr /v /c:"-" /b > "c:\Scripts\PED_Attributes.csv"'
是否有一种方法可以完全像输入数据一样获取csv中的输出?我尝试使用多个选项,例如添加-f 65001,但没有运气。我使用sqlCMD
是因为我需要将列名与数据一起导出。如果我们可以在sqlCMD
中解决此问题,那就太好了。如果我们还有另一种选择,可以通过诸如csv
之类的其他方式将数据从sql Server导出到bcp
,那也很好。请帮助我解决此问题。任何帮助将不胜感激。
解决方法
您可以将-f
参数添加到对sqlcmd的调用中,以指定用于输入和输出的代码页。
它的语法是
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
例如:
EXEC xp_cmdshell 'sqlcmd -s,-W -f 1252 -Q "set nocount on; select * from ##XMLData_Output ORDER BY SKU_NUMBER" | findstr /v /c:"-" /b > "c:\Scripts\PED_Attributes.csv"'
或
EXEC xp_cmdshell 'sqlcmd -s,-W -f o:65001 -Q "set nocount on; select * from ##XMLData_Output ORDER BY SKU_NUMBER" | findstr /v /c:"-" /b > "c:\Scripts\PED_Attributes.csv"'
(请参见https://docs.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-ver15上的sqlcmd doc和https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers上的代码页列表)