簡體   English   中英

SQL Server 2008和XQUERY

[英]SQL Server 2008 & XQUERY

我目前在SQL Server中使用Xquery從XML中提取一些信息。

我遇到了麻煩,因為我必須將一些動態內容放在一個變量上,但是它不起作用。

當我選擇這個時:

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

P是我的路徑,它很好,因為它可以與其他項目一起使用,但是我必須對此項目執行循環(以一個順序,您可以有很多項目...),所以這就是為什么我要使用@I和然后對此變量執行循環。

PS:不要說將[1]放在變量之后,否則每次都會選擇第一項。

編輯:“不起作用”是指當我放入[1]時,它僅向我發送第一項,而當我放入“ [sql:variable("@I")] ”(即“ value( )'需要一個單例(或空序列),找到的類型為'xdt:untypedAtomic *“的操作數

當然,我已經嘗試過'+@I'但它仍然無法正常工作。

我的XML示例:

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

最終編輯:我終於解決了此帖子對我有很大幫助的問題,很抱歉當時發布了該帖子。

在SQL Server中使用value()從xml列中獲取多個記錄

謝謝。

嘗試這個...

select v.x.value('.','varchar(20)')
from
   p.nodes('ListOrderItem/OrderItem//Seller[1]') v(x)

將整個表達式嵌入括號中,然后將[1]添加到末尾。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM