4

テーブル (Qualifications) に、異なる XML を含む XML 列 (Criteria) が 1 つあります。

<training ID="173"><badge ID="10027" /><badge ID="10028" /></training>
<book Category="Hobbies And Interests" PropertyName="C#" CategoryID="44" />
<sport Category="Hobbies And Interests" PropertyName="Cricket" CategoryID="46" />
<education ID="450" School="Jai ambe vidyalaya"></education>

「トレーニング」ノードの下にあるすべてのノードの「バッジ」ノード「ID」属性を読み取りたい。

誰でも助けることができますか?

4

2 に答える 2

6

このサンプルを試してみてください。役立つはずです (@xml をテーブル/列の名前に置き換えるだけです)。

DECLARE @xml XML
SET @xml ='
<training ID="173">
    <badge ID="10027" />
    <badge ID="10028" />
</training>
<book Category="Hobbies And Interests" PropertyName="C#" CategoryID="44" />
<sport Category="Hobbies And Interests" PropertyName="Cricket" CategoryID="46" />
<education ID="450" School="Jai ambe vidyalaya"></education>'

SELECT data.col.value('(@ID)[1]', 'int')
FROM @xml.nodes('(/training/badge)') AS data(col)

出力:

10027
10028
于 2013-07-31T13:52:51.243 に答える
6

badge内部trainingのみの要素の ID

select t.c.value('.', 'int') ID
from Qualifications q
    cross apply q.Criteria.nodes('//training[badge]/badge[@ID]/@ID') t(c)

badge要素の ID ( 内だけでなくtraining)

select t.c.value('.', 'int') ID
from Qualifications q
    cross apply q.Criteria.nodes('//badge[@ID]/@ID') t(c)

Criteria列が型の場合nvarchar、次のようにキャストできますxml

select t.c.value('.', 'int') ID
from Qualifications q
    cross apply (select convert(xml, q.Criteria) xmlCriteria) a
    cross apply a.xmlCriteria.nodes('//training[badge]/badge[@ID]/@ID') t(c)
于 2013-07-31T13:43:27.170 に答える