检索从XML字符串的唯一值
问题描述:
下面是数据类型nvarchar(MAX)
的我的XML字符串:检索从XML字符串的唯一值
declare @string Nvarchar(MAX)
set @string='<ROOT><Data C="1" /><Data C="2" /><Data C="3" /></ROOT>'
预期结果:
@c='1,2,3'
i want to check that the value of "C" is exists in table or not
答
您可以使用下面的代码来获得以表格形式显示值:
declare @string Nvarchar(MAX)
set @string='<ROOT><Data C="1" /><Data C="2" /><Data C="3" /></ROOT>'
DECLARE @StringXML XML = CAST(@string as XML);
SELECT T.c.value('(./@C)[1]', 'INT')
FROM @StringXML.nodes('ROOT/Data') T(c);
然后,您可以应用EXIST
子句。
SELECT STUFF
(
(
SELECT ',' + T.c.value('(./@C)[1]', 'VARCHAR(12)')
FROM @StringXML.nodes('ROOT/Data') T(c)
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
,1
,1
,''
);
你想检查'1,2,3'值是否存在'C'标签的值,对吗? – gotqn
@gotqn是的,我将该值存储在变量中并稍后应用 – Rojelo
'@ c'的值似乎是CSV。在'XML'中,'C'标签有不同的值。所需的输出将是'1',就像我们有'1,2,3'的csv一样,在XML中我们有'1,10,20',对吧? – gotqn