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)