代码之家  ›  专栏  ›  技术社区  ›  Aiden

SQL Server XQuery总是返回null

  •  0
  • Aiden  · 技术社区  · 10 月前

    我正在学习如何使用SQL读取XML,目前正在努力返回我所期望的数据。

    对于给定的示例,我希望返回值为“Data”的“tagFourData”。相反,我似乎总是变空

    declare @data xml = '<object>
        <Overview Requester="Me">
            <Request GetData="Y" Title="Get First SQL DataSet in XML" Id="1">
                <Detailed tagOne="yap" tagTwo="Yap">
                    <!--Further elements/attributes if needed -->
                </Detailed>
            </Request>
            <Request GetData="N" Title="Get Second SQL DataSet in XML" Id="2">
                <Detailed tagThree="yap" tagFour="Yap">
                    <!--Further elements/attributes if needed -->
                </Detailed>
            </Request>
            <Request GetData="Y" Title="Get Third SQL DataSet in XML" Id="3">
                <Detailed tagFour="Data" tagFive="data2" />
            </Request>
        </Overview>
    </object>'
    
    select @data.value('(object/Overview/Request/Detailed/tagFour/node())[1]', 'nvarchar(max)') as tagFourData
    

    我写Select语句的方式有问题吗?

    最好也考虑一个可以是动态的解决方案。也就是说,tagFour可能在一个完全不同的Id下,但结构Object/Overview/Request/Detailed将始终相同 非常感谢。

    1 回复  |  直到 10 月前
        1
  •  0
  •   Joel Coehoorn    10 月前

    你很接近:

    select @data.value('(object/Overview/Request/Detailed/@tagFour)[1]', 'nvarchar(max)') as tagFourData
    

    需要额外的 @ 以指示属性而不是子元素。

    但我不确定您将如何进一步概括这一点,因为 Detailed 元素是 的孩子 @tagFour 用于XPath查询。一旦您选择了一个属性, 您已选择该属性 ,并且该属性元素的子元素不再是同一路径的一部分。