我在写入文本文件时遇到问题。当我的文字是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程序吗?
答案 0 :(得分:1)
根据Scripting.FileSystemObject documentation,CreateTextFile
方法采用布尔值来创建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];