我有一个函数可以将 CSV 列表转换为表中的 nvarchar(max) 记录。我注意到它不适用于西里尔字母,问题是这里的替换:
DECLARE @XML xml = N'<r><![CDATA[' + REPLACE(@List, ',', ']]></r><r><![CDATA[') + ']]></r>'
如何使替换与西里尔符号一起使用?例如'тест'。
@List 是 NVARCHAR(MAX),我使用的是 SQL Server 2012。
我有一个函数可以将 CSV 列表转换为表中的 nvarchar(max) 记录。我注意到它不适用于西里尔字母,问题是这里的替换:
DECLARE @XML xml = N'<r><![CDATA[' + REPLACE(@List, ',', ']]></r><r><![CDATA[') + ']]></r>'
如何使替换与西里尔符号一起使用?例如'тест'。
@List 是 NVARCHAR(MAX),我使用的是 SQL Server 2012。
您是否将@List
变量定义为 nvarchar?替换将适用于 nvarchars
declare @list nvarchar(50) = N'те,ст'
select @list
DECLARE @XML xml = N'<r><![CDATA[' + REPLACE(@List, ',', ']]></r><r><![CDATA[') + ']]></r>'
该N''
表示法用于声明 Unicode 字符串文字。如果您定义一个变量 NVARCHAR,它会自动启用 Unicode(因此不需要(或者更确切地说:没有办法)额外声明N
for @variables - 它是字符串文字的一部分)。
由于您在 中获得西里尔字符SELECT N'тест'
,您应该检查变量 @List 的分配位置,以及它的值是什么。
不确定您的 CSV 解析器如何处理 Unicode 字符,但问题的根源可能是