0

私はあなたの助けが必要です。解決策を探していましたが、まだ何も機能していません。

テーブルの列に格納されている xml ファイルから複数の属性を選択する必要があります。

これはファイルです:

<ManagerConfig>
   <AccountList>
     <Account accountID=“1“  friendlyName=“Testname1“&gt; Test </Account>
     <Account accountID=“2“  friendlyName=“Testname2“&gt; Test </Account>
     <Account accountID=“3“  friendlyName=“Testname3“&gt; Test </Account>
     <Account accountID=“4“  friendlyName=“Testname4“&gt; Test </Account>
   </AccountList
</ManagerConfig>

このために、次のステートメントを使用しています。

set @accountID = @xmlxx.value('(/ManagerConfig/AccountList/Account/@accountId)[1]', 'varchar(max)')
set @friendlyName = @xmlxx.value('(/ManagerConfig/AccountList/Account/@friendlyName)[1]', 'varchar(max)')

結果は次のとおりです。

accountID     friendlyname
1             Testname1

値を[1]から[2]に変更すると、2番目の属性が取得されます。それで問題ありません。しかし、これらの属性がすべて必要であり、それらを別の一時テーブルにエクスポートします。値を変数 [@i] に置き換えることができると思いました:

set @accountID = @xmlxx.value('(/(ManagerConfig/AccountList/Account/@accountId)'[@i]'', 'varchar(max)')

しかし、構文エラーがあります:

プロシージャまたは関数の値に指定された引数の数が不十分です。

解決策を見つけるのを手伝ってくれることを願っています..

グリーツ・デニス

4

1 に答える 1

2

現在の変数の使用ではなく、結果セット (複数の結果を含むことができる) の取得に移行したいと仮定すると、次のようになります。

select t.C.value('@accountID','int') as AccountID,t.C.value('@friendlyName','varchar(max)') as FriendlyName
from @xmlxx.nodes('/ManagerConfig/AccountList/Account') as t(C)

(元のセットアップとテスト スクリプト、問題の奇妙な書式設定からのクリーニング、および修正Id-> ID、これは修正の方向性が間違っている可能性があります):

declare @xmlxx xml = '<ManagerConfig>
   <AccountList>
     <Account accountID="1"  friendlyName="Testname1"> Test </Account>
     <Account accountID="2"  friendlyName="Testname2"> Test </Account>
     <Account accountID="3"  friendlyName="Testname3"> Test </Account>
     <Account accountID="4"  friendlyName="Testname4"> Test </Account>
   </AccountList>
</ManagerConfig>'
declare @accountID varchar(max)
declare @friendlyName varchar(max)
set @accountID = @xmlxx.value('(/ManagerConfig/AccountList/Account/@accountID)[1]', 'varchar(max)')
set @friendlyName = @xmlxx.value('(/ManagerConfig/AccountList/Account/@friendlyName)[1]', 'varchar(max)')
于 2012-06-19T13:08:31.600 に答える