XMLがパラメーターとして渡されるストアドプロシージャがあり、そのxMLを読み取って、いくつかの更新を行う必要があります。XMLの形式は次のとおりです。
<Requests>
<RequestReference>R12345</RequestReference>
<Inventory InventoryId="1" InventoryName="I1">
<RequestCodes>
<Code>AAA</Code>
</RequestCodes>
</Inventory>
<Inventory InventoryId="2" InventoryName="I2">
<RequestCodes>
<Code>BBB</Code>
<Code>CCC</Code>
</RequestCodes>
</Inventory>
<Inventory InventoryId="3" InventoryName="I3">
<RequestCodes>
<Code>DDD</Code>
<Code>EEE</Code>
<Code>FFF</Code>
</RequestCodes>
</Inventory>
</Requests>
次に、次のようなテーブルのXMLを読み取る必要があります。
RequestReference InventoryId InventoryName Code
R12345 1 I1 AAA
R12345 2 I2 BBB
R12345 2 I2 CCC
R12345 3 I3 DDD
R12345 3 I3 EEE
R12345 3 I3 FFF
私は次のようなことを試みています
SELECT
T.Item.value('@InventoryId', 'VARCHAR(3)') AS InventoryId,
T.Item.value('@InventoryName', 'VARCHAR(3)') AS InventoryName,
T.Item.value('RequestCodes[1]/Code[1]', 'VARCHAR(5)') AS Code
FROM
@xmlDoc.nodes('Requests/Inventory')
AS T(Item)
それが生み出した結果は
InventoryId InventoryName Code
1 I1 AAA
2 I2 BBB
3 I3 DDD
したがって、これは機能しているように見えますが、目的の結果が完全には得られていません。