簡體   English   中英

SQL Server:如何獲取指定屬性的 XML 元素的值?

[英]SQL Server: How to get the value of a XML element specifying an attribute?

對於在 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() 函數返回我正在尋找的值“example”。 但是還有一種 - 更方便 - 只使用 value() 或 query() 的方法嗎?

先感謝您!

當然有...

您還可以縮短聲明:

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()達到類似的,但具有實際查詢的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM