sql-server - 如何使用 XQuery-sql 在 XML 中查找祖先

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

我正在处理一些 xml 列,我使用 XQuery 查找特定子项(子项 E)的第一个最近的祖先(B),但出现此错误:

Msg 9335, Level 16, State 1, Line 16 XQuery [query()]: The XQuery syntax 'ancestor' is not supported.

祖先和后代的深度级别不是静态的,我希望结果是“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)')

你能帮帮我吗?

最佳答案

您可以尝试使用不同的方法来避免调用 ancestor 轴,例如:

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

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

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

关于sql-server - 如何使用 XQuery-sql 在 XML 中查找祖先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31915374/

相关文章:

sql - `Delete From Join` 是标准 SQL 吗?

sql-server - SQLBindParameter 与 SQL_VARBINARY(MAX) 给出 "Invalid precision value"

连接表的 SQL 别名

sql - 合并 TVP + 更新记录时对列求和

sql - SSIS 数据流是如何真正工作的?

sql - 在所有节点中搜索 xml 列

c# - XDocument.ToString() 抛出 "' ', hexadecimal value 0x13, is an invalid character."异常

java - JAXB 嵌套集合

java - Android:共享菜单,我的菜单充气器无法解析我的资源

c# - 生成连续的字母数字 ID