1

我正在尝试将多个元素值返回到行中,并且遇到了以下问题,即它没有返回行中的所有实例,我已将问题隔离为单例问题。我参考了以下链接:

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

我用它来测试它是否会返回第一个和第二个实例并且确实如此,但我希望它作为单独的行返回。所以两行而不是两列

,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)')

但是有没有办法通过将路径留在值选择中来实现同样的事情,或者我是否将其保留在应用中?

4

1 回答 1

1

如果你想返回多行,你不能.value()单独使用——你需要将它与一个调用结合起来, .nodes()这将为与你的 XPath 表达式匹配的每个节点提供一行 XML:

;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)
于 2013-04-25T05:02:15.810 回答