2012-11-15 58 views
1

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

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

當我選擇這樣的:

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

P是我的道路,它是很好的,因爲它是與其他項目的工作,但我必須做這個項目的環(在一個訂單,你可以有很多項目...),所以這就是爲什麼我想把@I然後在這個變量上做一個循環。

PS:不要說在變量後加上[1],否則每次都會選擇第一項。

編輯:由「不工作」我的意思是,它給我只是第一個項目時,我把[1]和錯誤信息,當我把「[sql:variable("@I")]」,這是「值()」需要一個單(或空序列),發現類型的操作數「XDT:untypedAtomic類型*」

當然,我已經試過'[email protected]'但它仍然無法正常工作..我的XML的

例子:

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

Final編輯:我終於修好了這個帖子的問題幫了我很多,然後抱歉發貼。

Getting multiple records from xml column with value() in SQL Server

感謝。括號

+0

**我們展示**示例XML!並解釋你試圖從中獲取哪些部分...... –

+0

你是什麼意思的「不工作」。錯誤消息或錯誤的數據或...? –

+0

我猜測有一個關於「singleton」的錯誤。如果是這樣的話,你確實需要添加一個額外的'[1]'。將整個表達式嵌入括號中,並將'[1]'添加到結尾。 –

回答

0

嘗試......

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

我試過了,並且錯誤消息表示字符串格式不正確,謝謝。 – user1827115

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