0

我有一个函数可以将 CSV 列表转换为表中的 nvarchar(max) 记录。我注意到它不适用于西里尔字母,问题是这里的替换:

DECLARE @XML xml = N'<r><![CDATA[' + REPLACE(@List, ',', ']]></r><r><![CDATA[') + ']]></r>'

如何使替换与西里尔符号一起使用?例如'тест'。

@List 是 NVARCHAR(MAX),我使用的是 SQL Server 2012。

4

2 回答 2

1

您是否将@List变量定义为 nvarchar?替换将适用于 nvarchars

declare @list nvarchar(50) = N'те,ст'
select @list
DECLARE @XML xml = N'<r><![CDATA[' + REPLACE(@List, ',', ']]></r><r><![CDATA[') + ']]></r>'
于 2012-09-17T08:42:44.773 回答
1

N''表示法用于声明 Unicode 字符串文字。如果您定义一个变量 NVARCHAR,它会自动启用 Unicode(因此不需要(或者更确切地说:没有办法)额外声明Nfor @variables - 它是字符串文字的一部分)。

由于您在 中获得西里尔字符SELECT N'тест',您应该检查变量 @List 的分配位置,以及它的值是什么。

不确定您的 CSV 解析器如何处理 Unicode 字符,但问题的根源可能是

  • 不处理文件编码
  • 在分配给 @List 之前分配给 VARCHAR 列或变量
于 2012-09-17T09:01:01.630 回答