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