私は T-SQL と XQuery の初心者です。
このような構造のDBにXML列があります
<GPC xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="...">
<GP>
<N>Amount1</N>
<V i:type="X_AMT">
<AMT>100001</AMT>
<X_CODE>Dollar</X_CODE>
</V>
</GP>
<GP>
<N>Amount2</N>
<V i:type="X_AMT">
<AMT>0</AMT>
<X_CODE />
</V>
</GP>
<GP>
<N>Amount3</N>
<V i:type="X_AMT">
<AMT>100001</AMT>
<X_CODE>Dollar</X_CODE>
</V>
</GP>
<GP>
<N>Amount4</N>
<V i:type="X_AMT">
<AMT>0</AMT>
<X_CODE />
</V>
</GP>
<GP>
<N>Amount5</N>
<V i:type="X_AMT">
<AMT>100001</AMT>
<X_CODE>Dollar</X_CODE>
</V>
</GP>
<GP>
**<N>NeededAmount</N>**
<V i:type="Y">
<DETAILS>
<REFERENCE>
<N>**ReferenceName1**</N>
<OId>111111</OId>
</REFERENCE>
</DETAILS>
<DETAILS>
<REFERENCE>
<N>**ReferenceName2**</N>
<OId>22222</OId>
</REFERENCE>
</DETAILS>
</V>
</GP>
...
</GPC>
これは、私が使用している SQL Server のクエリです。クエリは、Name1 という名前を 1 つだけ返します。しかし、2 つの名前があり、100 の名前が存在する可能性があり、その名前を取得したいと考えています。
SELECT v.Content.query(N'declare default element namespace "...";
for $i in (GPC/GP) where ($i/N[1] eq "NeededAmount") return ($i)').value('declare default element namespace "...";
(GP/V/DETAILS/REFERENCE/N)[1]', 'nvarchar(max)') AS NeededName
FROM DB1.protected.WorkItem as v
where v.Id = 1111
私の質問は、ドキュメント内のすべての名前を取得するためにこれを変更するにはどうすればよいですか? 誰かが私を助けることができますか?
前もって感謝します。