Sql server TSQL从文件读入varchar/nvarhar错误
因此,为了好玩,我决定使用TSQL和Microsoft SQL Server Management Studio 2008 R2读取一个文本文件并将内容存储到一个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
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
一起使用。我很高兴我的代码有帮助:)。