Sql server TSQL从文件读入varchar/nvarhar错误

Sql server TSQL从文件读入varchar/nvarhar错误,sql-server,tsql,sql-server-2008-r2,varchar,nvarchar,Sql Server,Tsql,Sql Server 2008 R2,Varchar,Nvarchar,因此,为了好玩,我决定使用TSQL和Microsoft SQL Server Management Studio 2008 R2读取一个文本文件并将内容存储到一个NVARCHAR。我找到了一个这样做的例子 因此,我用我的ABC.txt文件尝试了这一点,其内容如下: ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 当我第一次尝试将此文件的内容存储到@myString中时,我使用了以下代码: declare @myString nvar

因此,为了好玩,我决定使用TSQL和Microsoft SQL Server Management Studio 2008 R2读取一个文本文件并将内容存储到一个
NVARCHAR
。我找到了一个这样做的例子

因此,我用我的
ABC.txt
文件尝试了这一点,其内容如下:


ABCDEFGHIJKLMNOPQRSTUVWXYZ

abcdefghijklmnopqrstuvwxyz


当我第一次尝试将此文件的内容存储到
@myString
中时,我使用了以下代码:

declare @myString nvarchar(max); 

Select @myString  = BulkColumn
from OPENROWSET(Bulk 'C:\Users\<myComputer'sNameHere>\Documents\How2\FilesForTestingStuff\ABC.txt', SINGLE_BLOB) as x 
print @myString;
declare@myString nvarchar(最大值);
选择@myString=BulkColumn

从OPENROWSET(Bulk'C:\Users\中,我想这取决于输入文件的编码

您使用了
SINGLEBLOB
,根据MSDN,它会导致数据以
varbinary(MAX)的形式返回
。您的文件可能是使用非unicode编码保存的,因此当将数据导入
nvarchar
列时,SQL对其进行了错误的解释。更改类型可以正确读取字符。请尝试使用UTF-16对文件进行编码,并尝试将数据导入nvarchar(MAX)变量

更新

我试图重新创建您描述的问题。我已使用ANSI编码保存了一个文本文件,运行导入脚本并获得与您在问题中发布的内容类似的输出。然后,我将该文件转换为UCS-2 Little-Endian编码,运行脚本后,我获得了正确的输出

综上所述,如果您想使用带
SINGLEBLOB
选项的导入,只需将带数据的文件转换为使用UCS-2 Little-Endian编码,它应该可以正确地与
nvarchar
SQL类型一起工作

参考链接:


好的,我理解文件原因部分,但我不知道如何检查文件的编码,也找不到任何转换文件的TSQL示例。您可以使用文本编辑器检查文件的编码。您也可以使用SQL Server Management Studio以适当的编码保存文件。只需单击按钮创建新的脚本文件,输入t要保存数据,请单击“另存为…”,然后单击“保存”按钮旁边的小箭头,然后从“编码”列表中选择“使用编码保存…”,选择Unicode(1200)并保存文件。@user3003304-您可能会发现有用的:。要查看文件的编码,您可以使用十六进制编辑器,例如Visual Studio有一个内置编辑器,或者我喜欢使用:“xvi32”。因此,我将代码更改为使用SINGLE_NCLOB而不是SINBLEBLOB,并将编码更改为Unicode CodePage 1200。这使它可以使用NVARCHAR正确打印。感谢LukasZ M。它也可以与
SINGLEBLOB
一起使用。我很高兴我的代码有帮助:)。