ここ

2017-09-27 9 views
2

は、データ型nvarchar(MAX)の私の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,2,3'のcsvのように '1'にな​​り、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 
    ,'' 
);