2017-09-27 59 views
2

下面是数据类型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 
+0

你想检查'1,2,3'值是否存在'C'标签的值,对吗? – gotqn

+0

@gotqn是的,我将该值存储在变量中并稍后应用 – Rojelo

+0

'@ c'的值似乎是CSV。在'XML'中,'C'标签有不同的值。所需的输出将是'1',就像我们有'1,2,3'的csv一样,在XML中我们有'1,10,20',对吧? – gotqn

回答

1

您可以使用下面的代码来获得以表格形式显示值:

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 
    ,'' 
);