1

現在、SQL Server で Xquery を使用して XML から情報を抽出しています。

1 つの変数にいくつかのダイナミクス コンテンツを配置する必要があるため、問題が発生していますが、機能しません。

これを選択すると:

P.value('ListOrderItem[1]/OrderItem[1]/Item[sql:variable("@I")]/Seller[1]','VARCHAR(64)')

Pは私のパスであり、他のアイテムと連携しているので問題ありませんが、このアイテムでループを実行する必要があります (1 つの注文で、多くのアイテムを持つことができます...) @I。この変数でループします。

PS: を変数の後に置くとは言わないでください。そうしないと、[1]毎回最初の項目が選択されます。

編集:「機能しない」とは、最初のアイテムのみを送信することを意味し、「」を入力する[1]とエラーメッセージが送信されます[sql:variable("@I")]。これは、「値()」がシングルトン(または空のシーケンス)を必要とし、タイプ 'xdt:untypedAtomic *"

もちろん、試してみました'+@I'が、それでもうまくいきません..

私の XML の例:

<ListOrderItem>
 <OrderItem>
  <Item>
   ...
  </Item>
  <Item>
   ...
  </Item>
 </OrderItem>
</ListOrderItem>

最終編集:この投稿の問題を最終的に修正しました。投稿して申し訳ありません。

SQL Serverでvalue()を使用してxml列から複数のレコードを取得する

ありがとう。

4

2 に答える 2

0

式全体を括弧内に埋め込み[1]、末尾に the を追加します。

declare @XML xml = '
<ListOrderItem>
 <OrderItem>
  <Item>
   <Seller>1</Seller>
  </Item>
  <Item>
   <Seller>2</Seller>
  </Item>
 </OrderItem>
</ListOrderItem>'


declare @I int = 2

select @XML.value('(ListOrderItem[1]/OrderItem[1]/Item[sql:variable("@I")]/Seller[1])[1]','VARCHAR(64)')

結果: 2

于 2012-11-15T17:05:26.910 に答える
0

これを試して...

select v.x.value('.','varchar(20)')
from
   p.nodes('ListOrderItem/OrderItem//Seller[1]') v(x)
于 2012-11-15T15:43:28.213 に答える