Sql服务器值方法只返回一个值不是多个

问题描述:

我想将多个元素值返回到行,我正在运行到下面的问题,它不返回行中的所有实例,我已经将问题隔离到单例问题。我曾经引用下面的链接:Sql服务器值方法只返回一个值不是多个

http://www.jasonstrate.com/2010/11/xquery-for-the-non-expert-value/

http://msdn.microsoft.com/en-us/library/ms175894.aspx

我尝试了这些:

,c.value('(Tags/Tag/text())[1]' , 'NVARCHAR(20)') AS Tag 

而且

,c.value('(//Tags/Tag)[1]' , 'NVARCHAR(20)') AS Tag 

我用这个测试,看看它是否会返回第一个和第二个实例,但我希望它作为单独的行返回。因此,两行,而不是2列

,c.value('(Tags/Tag)[1]' , 'NVARCHAR(20)') AS Tag 
,c.value('(Tags/Tag)[2]' , 'NVARCHAR(20)') AS Tag2 

这里是XML

<nsp:Tags> 
    <nsp:Tag>Books</nsp:Tag> 
    <nsp:Tag>Reading</nsp:Tag> 
    </nsp:Tags> 

编辑我是能够与

C.value('.', 'nvarchar(20)') 

得到它,但快照有没有办法实现通过在值选择中保留路径来做同样的事情,还是保留在apply中?

如果要返回多行,你不能只用.value()孤单 - 你需要它来.nodes()打电话说,我给你的XML一行每个你XPath表达式匹配的节点相结合:

;WITH XMLNAMESPACES ('.....' as nsp) 
DECLARE @Data XML = '<nsp:Tags> 
         <nsp:Tag>Books</nsp:Tag> 
         <nsp:Tag>Reading</nsp:Tag> 
        </nsp:Tags>' 

SELECT 
    XTags.value('.', 'varchar(50)') 
FROM 
    @Data.nodes('/Tags/Tag') XTbl(XTags)