すべての要素がT-SQLからのIDを持つように、サードパーティのxmlを変更しようとしています。
これは元のxml(セクション)です:
<Tables>
<Table Type="LineItem">
<TableRow>
<Field Name="LI_NominalCode" Type="wd_lit_nominalcode">244234</Field>
<Field Name="LI_NominalDesc" Type="lit_nominaldesc">RENT RECEIVABLE - INTERNAL</Field>
<Field Name="LI_Account" Type="lit_wd_account" />
<Field Name="LI_AccountDesc" Type="lit_wd_accountdesc" />
<Field Name="LI_SecondAccount" Type="lit_wd_2ndaccount" />
<Field Name="LI_SecondAccountDesc" Type="lit_wd_2ndaccountdesc" />
<Field Name="LI_NetValue" Type="lit_vatexcludedamount">4522.89</Field>
<Field Name="LI_EnergyUsage" Type="wd_energyusage">56666</Field>
<Field Name="LI_EnergyType" Type="wd_energytype">ELECTRICITY</Field>
</TableRow>
<TableRow>
<Field Name="LI_NominalCode" Type="wd_lit_nominalcode">150021</Field>
<Field Name="LI_NominalDesc" Type="lit_nominaldesc">Rent Building 1</Field>
<Field Name="LI_Account" Type="lit_wd_account" />
<Field Name="LI_AccountDesc" Type="lit_wd_accountdesc" />
<Field Name="LI_SecondAccount" Type="lit_wd_2ndaccount" />
<Field Name="LI_SecondAccountDesc" Type="lit_wd_2ndaccountdesc" />
<Field Name="LI_NetValue" Type="lit_vatexcludedamount">456.37</Field>
<Field Name="LI_EnergyUsage" Type="wd_energyusage">2805.00</Field>
<Field Name="LI_EnergyType" Type="wd_energytype">ELECTRICITY</Field>
</TableRow>
<TableRow>
<Field Name="LI_NominalCode" Type="wd_lit_nominalcode">2342341</Field>
<Field Name="LI_NominalDesc" Type="lit_nominaldesc">Rent Building 2</Field>
<Field Name="LI_Account" Type="lit_wd_account" />
<Field Name="LI_AccountDesc" Type="lit_wd_accountdesc" />
<Field Name="LI_SecondAccount" Type="lit_wd_2ndaccount" />
<Field Name="LI_SecondAccountDesc" Type="lit_wd_2ndaccountdesc" />
<Field Name="LI_NetValue" Type="lit_vatexcludedamount">355</Field>
<Field Name="LI_EnergyUsage" Type="wd_energyusage">6900</Field>
<Field Name="LI_EnergyType" Type="wd_energytype">ELECTRICITY</Field>
</TableRow>
</Table>
<Table Type="BankAccountTable" />
<Table Type="VATTable" />
</Tables>
ご覧のとおり、<Table>
要素にはIDがないため、プロセスの後半で要素を識別するのは困難です。
<Table>
すべての要素を調べて次のようなスニペットを実行するループを作成したいと思います。
set @xml.modify('
insert attribute ID {sql:variable("@idString")}
into (/Documents/Document/Invoice/Tables/Table[@Type="LineItem"]/TableRow)[sql:variable("@id")]')
問題は最後のSQL変数にあり、エラーは次のとおりです。
XQuery [modify()]:'http://www.w3.org/2001/XMLSchema#decimal?'、'http://www.w3.org/2001/XMLSchema#boolean?'のみ または'node()*'式が述語として許可され、' xs:string?'が見つかりました
これは問題なく機能しますが、常に同じ行(番号1)を変更したくありません。
set @xml.modify('
insert attribute ID {sql:variable("@idString")}
into (/Documents/Document/Invoice/Tables/Table[@Type="LineItem"]/TableRow)[1]')
ちなみに、文字列の代わりにint変数を使用すると、次のようになります。
set @xml.modify('insert attribute ID {sql:variable("@idString")}
into (/Documents/Document/Invoice/Tables/Table[@Type="LineItem"]/TableRow)[sql:variable("@idInt")]')`
別のエラーが発生します:
XQuery [modify()]:「挿入」のターゲットは単一ノードである必要があります。「element(TableRow、xdt:untyped)」が見つかりました*