【问题标题】:SQL Server XML parsing first node attributesSQL Server XML解析第一个节点属性
【发布时间】:2011-10-31 12:46:37
【问题描述】:

我在数据库中有一个 XML 列,可能看起来像这样:

<sql-connection-info name="myname" server="(local)\SQLEXPRESS" other-attribute="value" />

<oracle-connection-info name="othername" server="address" other-attribute="value" />

等等。节点和属性的名称几乎可以是任何名称。我需要遍历第一个节点上的属性/值对。我看到的每个样本都是已知的节点/属性名称。

当我尝试使用时

@xmlColumn.query("/@*")

我收到此错误

XQuery [query()]:不支持顶级属性节点。

这在 TSQL 中可行吗?如果是,我该怎么做?

【问题讨论】:

    标签: sql-server xml tsql xquery


    【解决方案1】:
    declare @xmlColumn xml = '<sql-connection-info name="myname" server="(local)\SQLEXPRESS" other-attribute="value" />'
    
    select T.N.value('local-name(.)', 'varchar(max)') as Name,
           T.N.value('.', 'varchar(max)') as Value
    from @xmlColumn.nodes('//@*') as T(N)
    

    结果:

    Name              Value
    ----------------  -------------------
    name              myname
    server            (local)\SQLEXPRESS
    other-attribute   value
    

    【讨论】:

    • 谢谢,这正是我所需要的。 :)
    • @Mikael 有没有办法限制它?我有类似的 XML,但它也有子节点,我只想要顶部节点的属性。谢谢!
    • @mbourgon 当然,是双斜线使它包含子节点。改为nodes('/*/@*')
    【解决方案2】:

    你可以使用

    @xmlColumn.query("/node()[1]")
    

    获取每个条目的第一个节点。 node() 匹配任何元素节点。 从你的帖子我不明白你是否想要e。 G。您条目的第一个节点的name 属性。然后你会使用:

    @xmlColumn.query("/node()[1]/@name")
    

    【讨论】:

    • 我需要所有属性并获取它们的名称和值。我不能使用这个 @xmlColumn.query("/node()[1]/@name") 因为我不知道属性的名称。
    • 那么你能用包含所有属性的第一个节点本身吗?这将是我第一个提议的结果:@xmlColumn.query("/node()[1]")
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多