将nvarchar写入文本文件

时间:2018-01-07 09:28:38

标签: sql sql-server tsql unicode

我在写入文本文件时遇到问题。当我的文字是ASCII时,一切正常:

DECLARE @OLE INT
DECLARE @FileId INT
DECLARE @File VARCHAR(max) = 'D:\test.txt'
DECLARE @Text NVARCHAR(max) = N'no problem when writing in english!'

EXECUTE sp_OACreate 'Scripting.FileSystemObject',@OLE OUT
EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileId OUT, @File,2,1
EXECUTE sp_OAMethod @FileId, 'WriteLine', Null, @Text

但是当我的文字有Unicode字符时,文件中不会出现任何内容:

DECLARE @Text NVARCHAR(max) = N'من نمایش داده نمیشم'

我也尝试了sp_OASetProperty,但这不起作用(mentioned here):

EXECUTE sp_OASetProperty @OLE, 'Charset', 'UTF-8'  

有任何想法解决这个问题或使用其他T-SQL程序吗?

2 个答案:

答案 0 :(得分:1)

根据Scripting.FileSystemObject documentationCreateTextFile方法采用布尔值来创建Unicode文件。您可以更改T-SQL代码以使用该方法而不是OpenTextFile

编辑:

以下是根据Tom的评论使用OpenTextFile的示例。我将原始代码中的iomode值从1更改为8以匹配文档,并添加close和destroy以防您的完整代码缺少这些重要任务。

DECLARE @OLE INT;
DECLARE @FileId INT;
DECLARE @File VARCHAR(max) = 'c:\test.txt';
DECLARE @Text NVARCHAR(max) = N'من نمایش داده نمیشم';

EXECUTE sp_OACreate 'Scripting.FileSystemObject',@OLE OUT;
EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileId OUT, @File,8,1,-1;
EXECUTE sp_OAMethod @FileId, 'WriteLine', Null, @Text;
EXECUTE sp_OAMethod @FileId, 'Close';
EXECUTE sp_OADestroy @FileId OUT;
EXECUTE sp_OADestroy @OLE OUT;

答案 1 :(得分:-1)

 questionList = (List<SurveyQuestions>)TempData[Common.SURVEY_QUESTION_HOLDER];