【发布时间】:2019-09-13 13:39:49
【问题描述】:
我需要检索 View 表中逗号分隔字符串的位置 10 中的内容。
Row 1 N,l,S,T,A,,<all>,,N,A,N,N,N,Y,Y,,Y,Y,Y,,AA,SA,Enterprise,
Row 2 M,,A,S,AS,SS,AS,N,N,N,N,Y,Y,Y,ENTERPRISE,S,,A
Row 3 L,,A,D,S,A,A,AA,Y,Y,Y,YNN,N,N,N,N,A,AA,AD,D,D
Div1 是我的列的名称,Div2 是结果列的名称。我使用以下代码:
SELECT TOP (2000)
[Id],
CONVERT(XML,'<x>' + REPLACE(REPLACE(REPLACE(Div1, '>', ''), '<', ''), ',', '</x <x>') + '</x>').value('/x[10]', 'VARCHAR(MAX)') [Div2],
Div1
FROM
[dbo].[database]
我使用字符类型VARCHAR(MAX),因为这是我数据库中 Div1 的类型。如果我运行的行数少于 20000,则该代码有效。但是我使用的数据集有超过 100,000 行。如果我运行整个数据,它会停止并出现以下错误:
消息 9421,第 16 级,状态 1,第 1 行。
XML解析:第1行,字符218,非法名称字符
有没有办法解决这个问题?
【问题讨论】:
-
要检索逗号分隔字符串的位置 10 中的内容,您不需要将字符串转换为 xml。您可以找到大量 SQL 示例来将 csv 字符串转换为结果集。
-
您的 SQL Server 版本是多少?
-
谢谢,我的 SQL Server Management Studio 版本是 15.0.18142.0
标签: sql sql-server xml