1

我目前在 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 列获取多条记录

谢谢。

4

2 回答 2

0

将整个表达式嵌入括号中,并[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

于 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 回答