2017-09-27 1 views
2

Voici une ma chaîne XML de type de données nvarchar(MAX):Récupération de la seule valeur de chaîne XML

declare @string Nvarchar(MAX) 
set @string='<ROOT><Data C="1" /><Data C="2" /><Data C="3" /></ROOT>' 

Résultat attendu:

@c='1,2,3' 

i want to check that the value of "C" is exists in table or not 
+0

Vous voulez vérifier si la valeur '1,2,3' existe en tant que valeur dans une balise' C', n'est-ce pas? – gotqn

+0

@gotqn Oui, j'ai stocké cette valeur dans la variable et plus tard il y a application – Rojelo

+0

La valeur de '@ c' semble être CSV. Dans 'XML' vous avez différentes valeurs pour la balise' C'. La sortie désirée sera '1' comme dans le csv nous avons' 1,2,3' et dans le XML nous avons '1, 10, 20', non? – gotqn

Répondre

1

Vous pouvez utiliser le code suivant pour obtenir les valeurs sous forme de tableau :

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

Ensuite, vous pouvez appliquer la clause 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 
    ,'' 
);