2016-07-05 12 views
0

XML要素から最後の属性値を取得するSQLクエリが必要です。私は以下のXMLを持っています。 legalNames/Name Pathから 'Current State Contracting'のName値を取得する必要があります。この上の任意のヘルプがXML要素から最後の属性値を取得するためにSQLクエリが必要です

<legalNames id="l5922F64208E14D97BEE4C2E94B670146" deleted="0"> 
    <operatingNames id="o370FA0A9EAE54290B132211A1EB28D8D" deleted="0"> 
    <Name>CSR Contracting</Name> 
    </operatingNames> 
    <Name prior="" id="N45BF84B89B4F4DB987C07EF568E585D9">Current State Contracting</Name> 
</legalNames> 
+1

あなたが使用しているRDBMSを明記していないので、私の答えは少し速かったです。適切な製品とバージョンで質問にタグを付けてください! – Shnugo

答えて

0

申し訳ありませんが、私は実際にそれのための解決策を見つけました。 カラムの代わりに(。)を使用すると、このような問題が解決します( '(。)[1]'、 'varchar(500)')。 LegalNames/Name pathからすべての値を取得するための正確なコードは以下のとおりです。

SELECT HistoryID, 
    x.r.value('(@id)[1]', 'varchar(500)') AS NameID, 
    x.r.value('(@prior)[1]', 'varchar(500)') AS Name_prior, 
    x.r.value('(.)[1]', 'varchar(500)') AS Name  
From 
    (select HistoryID,XMLData 
    FROM [Compass Source_Test].dbo.Temp_History_table_july11) s 
    CROSS apply s.XMLData.nodes('legalNames/Name') as x(r) 
+0

こんにちは、あなたは自分で解決策を見つけました。しかし、私に一つのヒントを許してください。この答えは、関連する問題の解決策を見つけようとしている人にとっては絶対に役に立たない。あなたの '( '(。)[1]'、 'varchar(500)')'は現在のノード*の最初の出現を選択します*、それはむしろ - uhm - 意味がありません。あなたは私の答えからコピーするかもしれません)あなたの解決策を示すために、あなたの質問にあなたが使用しているRDBMSをタグ付けしてください。ハッピーコーディング! – Shnugo

+0

こんにちは、もう一度、コードを追加するためのthx!将来の質問のためにあなたを助けるために:あなたの質問では、これはテーブルから来ていることを述べなかった - かなりの違い。 '.nodes()'でのあなたのアプローチは '.value()'の呼び出しを可能にする実際の要素にナビゲートします。同じ位置から複数の値を取得したい場合は、これは意味があります。あなたの質問には何も言わなかった。あなたの答えは実際には別の問題をカバーしています...そして、btw:あなたのコードは '()[1]'なしで動作するはずです。ハッピーコーディング! – Shnugo

0

は、この(SQL-Serverの構文)のようにそれを試してみてください。..感謝されています応答遅れのため

DECLARE @xml XML= 
'<legalNames id="l5922F64208E14D97BEE4C2E94B670146" deleted="0"> 
    <operatingNames id="o370FA0A9EAE54290B132211A1EB28D8D" deleted="0"> 
    <Name>CSR Contracting</Name> 
    </operatingNames> 
    <Name prior="" id="N45BF84B89B4F4DB987C07EF568E585D9">Current State Contracting</Name> 
</legalNames>'; 

select @xml.value('(/legalNames/Name)[1]','nvarchar(max)') 
+0

返信ありがとうShnugo。 – Dugyala

関連する問題