別のXMLクエリについてもう少し助けが必要です。以下は、私のXML列のレコードの例です。
<Fields>
<MappedFields>
<Field name="FormNumber" value="21" />
<Field name="ProcedureCode" value="T2023" />
<Field name="CurrentDate" value="4/23/2012" />
</MappedFields>
</Fields>
フィールド要素は任意の順序で表示される可能性があるため、次のように表示することもできます。
<Fields>
<MappedFields>
<Field name="ProcedureCode" value="G5532" />
<Field name="FormNumber" value="12" />
<Field name="CurrentDate" value="3/29/2011" />
</MappedFields>
</Fields>
私が探しているのは、テーブル内のすべてのレコードの「FormNumber」という名前のフィールドの値を取得するクエリです。以下のクエリは、「FormNumber」という名前のフィールドがXMLの最初のフィールド要素である場合に機能します。必要なのは、最初の要素でなくてもField要素を見つけるクエリです。誰かがこれを手伝ってくれますか?
SELECT
X.Node.value(N'(Field/@value)[1]', 'nvarchar(max)') AS FormNumber
FROM
dbo.MHTCM_LetterSent A
CROSS APPLY A.LetterXML.nodes(N'/Fields/MappedFields') AS X(Node)
WHERE
X.Node.value(N'(Field/@name)[1]', 'nvarchar(max)') = 'FormNumber'