2012-08-16 68 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