【问题标题】:SQL Server: How to get the value of a XML element specifying an attribute?SQL Server:如何获取指定属性的 XML 元素的值?
【发布时间】:2016-04-28 08:04:17
【问题描述】:

为了在 SQL 查询中使用,我需要获取特定 XML 元素的值。 XML 元素由其属性指定。

我的 XML 元素如下所示:

<translations>
  <value lang="en-US">example</value>
  <value lang="de-DE">Beispiel</value>
</translations>

当我将 lang 指定为“en-US”时,我正在寻找的值将是“example”。

我找到了一种方法来获取这个值,方法是使用 query() 函数,然后使用 value() 函数。

declare @S varchar(max)

set @S =
'<translations>
  <value lang="en-US">example</value>
  <value lang="de-DE">Beispiel</value>
</translations>'

declare @X xml

set @X = CAST(@S as xml)

select @X.query('/translations/value[@lang="en-US"]').value('.','varchar(max)')

此 select 语句通过使用 query() 和 value() 函数返回值“示例”。但是还有一种更方便的方式来只使用 value() OR query() 吗?

提前谢谢你!

【问题讨论】:

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


    【解决方案1】:

    当然有……

    您也可以缩短声明:

    declare @X xml=
    '<translations>
      <value lang="en-US">example</value>
      <value lang="de-DE">Beispiel</value>
    </translations>';
    
    select @X.value('(/translations/value[@lang="en-US"])[1]','varchar(max)');
    

    关键是,当您使用.value() 时,您需要一个单例 结果。您可以通过将XPath 放在括号中并强制采用第一个元素来实现这一点(在这种情况下,它是唯一的元素)。

    顺便说一句:如果你需要这个(迟早你会需要这个......),你可以像这样将“en-US”作为参数放入你的查询中:

    declare @prm VARCHAR(10)='en_US';
    select @X.value('(/translations/value[@lang=sql:variable("@prm")])[1]','varchar(max)');
    

    您可以使用sql:column() 获得类似的结果,但使用实际查询的值。

    【讨论】:

    • 非常感谢!这对我来说是一个巨大的进步!
    猜你喜欢
    • 2010-12-06
    • 2012-10-06
    • 2017-12-23
    • 1970-01-01
    • 2021-08-07
    • 2011-05-07
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多