使用UTF-8中的xp_cmdshell写入文件

时间:2012-05-29 08:02:59

标签: file sql-server-2005 utf-8 xp-cmdshell

我正在使用xp_cmdshell创建文件,如下所示:

SELECT @command = 'echo ' + @fileContent + ' > e:\out\' + @fileName + '.csv'
exec master.dbo.xp_cmdshell 'mkdir "e:\out\"'
exec master..xp_cmdshell @command 

问题是文件内容不是UTF-8,因此某些特殊字符是错误的。

我可以用UTF-8编码创建文件吗?

3 个答案:

答案 0 :(得分:4)

我最后通过将输出写入temp.txt文件并添加下一个PowerShell命令将其转换为UTF-8来成功完成此操作:

-- Change encoding to UTF-8 with PowerShell 
SET @command = 'powershell -Command "Get-Content '+@Path+'\temp.txt -Encoding Unicode | Set-Content -Encoding UTF8 '+@path+'\'+@filename+'"';
EXEC xp_cmdshell @command;

答案 1 :(得分:1)

您可以使用SQLCMD代替旧的tecnique作为DOS outupt重定向

sqlcmd -S ServerName -d DataBaseName -E -o "CSV File Path & Location" -Q "Your Query" -W -w 4000 -s ";" -f 65001

交换机 -f 65001 表示使用UTF8作为outfile文件

SELECT @command = 'sqlcmd -S ServerName -d DataBaseName -E -o "'+ @fileName +'" -Q "Your  Query" -W -w 4000 -s ";" -f 65001'
exec master.dbo.xp_cmdshell 'mkdir "e:\out\"'
exec master..xp_cmdshell @command

P.S。我无法测试它,所以请检查SQLCMD文档

希望有所帮助

答案 2 :(得分:0)

我选择了Jan Lenders的方式,但在读取时间时未使用该编码类型设置。

SET @COMMAND = 'powershell -Command "Get-Content '+ @PATH + @V_FILE_NAME + ' | Set-Content -Encoding UTF8 '+ @PATH + @V_FILE_NAME +'2"';

这可行。

谢谢^^