每个字段(我们将其称为field1)具有与其关联的串联字符串(我们将其称为field2)。我想对field2进行定界,以便将串联的值分成几行。我正在使用“节点”来完成此操作,但始终出现错误。
还有其他方法可以实现此目标,例如将字符串分成列并在数据上旋转,但这很麻烦。这种方法似乎是最有效的,但我不知道该怎么做。
with xmll as (
select field1, cast('<r>'+replace(replace(field2,'Case #',''), ',', '</r>
<r>')+'</r>' as xml) as XMLCol
from [database].dbo.table i
where field2 like 'Case%#%'
)
select x.*
, n.r.value('.', 'varchar(max)')
from xmll x
cross apply
XMLCol.nodes(XMLCol) as n(r)
order by field1
当前错误消息是:
Msg 8172, Level 16, State 1, Line 1
The argument 1 of the XML data type method "nodes" must be a string literal.
现在是什么:
我想要什么:
答案 0 :(得分:1)
我认为您必须对此进行更改
cross apply
XMLCol.nodes(XMLCol) as n(r)
对此
cross apply
XMLCol.nodes('/r') as n(r)
原因:
您的xml由重复的<r>
元素组成。您必须告诉.nodes()
您想找回什么。
如果您拥有SQL Server 2016或更高版本,建议阅读this answer的JSON部分。现在有更好的分割字符串的方法...