2012-08-16 67 views
1

請找到下面的腳本代碼段SQL Server的XML解析

declare @xml xml 
set @xml = '<Message> 

<MessageData> 
    <MessageDataSet > 
    <id> 1 </id> 
    <name>Vasan</name>  
    </MessageDataSet> 
    <MessageDataSet > 

    <id> 2 </id> 
    <name>Vivek</name> 
    </MessageDataSet> 

</MessageData> 

</Message>' 

SELECT 
t.c.value('(id)[1]','varchar(100)') 
from 
@xml.nodes('/Message/MessageData/MessageDataSet') AS t(c) 

我讓所有的 '身份證' 節點值,即 '1' & '2'。我的需要,我必須直接獲取第二個'id'的值,在這種情況下,它將是'2'。任何人都可以讓我知道相同的Select查詢語法嗎?謝謝。

回答

1

如何:

SELECT 
    @xml.value('(/Message/MessageData/MessageDataSet/id)[2]','varchar(100)') 

返回2作爲我的價值。這抓住了XML內的第二個條目 - 如果它不在那裏,你會得到NULL。

另外:爲什麼要把它轉換爲varchar(100) - 不會int是一個更合適的類型?

+0

是的,你的解決方案的作品,謝謝堆!!! – Vasan 2012-08-16 15:37:56

+1

@mark_s,對不起,錯過了回答你的其他查詢,varchar(100)只是一個停止缺口的東西,你是對的,我將使用適當的類型。 – Vasan 2012-08-16 16:07:22