如何使用XQuery-sql

时间:2015-08-10 08:54:49

标签: sql-server xml sql-server-2008 tsql xquery

我正在使用一些xml列,并使用XQuery查找特定子项(子项E)的第一个最近的祖先(B),但是会发生以下错误:

  

Msg 9335,Level 16,State 1,Line 16 XQuery [query()]:XQuery   语法'ancestor'不受支持。

祖先和后代的深度级别不是静态的,我希望结果为“B2” 我试过了

    DECLARE @x xml
SET @x = CAST(
'<A>
    <B name="B1">
        <C>
            <B id="1" name="B2">
                <D id="1.1" name="D1">
                    <E id="1" />
                    <E id="2" />
                </D>
            </B>
        </C>
    </B>    
</A>' AS xml)

SELECT @x.query('data(//E/ancestor::B[1]/@name)')

你能帮我吗?

2 个答案:

答案 0 :(得分:3)

您可以尝试使用其他方法来避免调用ancestor轴,例如:

SELECT @x.query('data(//B[.//E][not(.//B)]/@name)')

关于正在使用的谓词的简要说明:

  • [.//E]:确保目标B元素具有后代元素E
  • [not(.//B)]:确保目标B元素没有后代元素B,换句话说,目标B元素必须是内部最后B元素,后代为E

答案 1 :(得分:2)

foreach