使用SQL Server获取具有条件的XML节点的值

时间:2011-12-15 13:04:06

标签: xml sql-server-2005

我之前没有在数据库中使用过XML,所以我需要一些帮助。 我需要从XML中获取name等于“sv-SE”的值,以获取多行。

XML看起来像这样:
第1行

<cultures>
  <culture name="sv-SE">Sverige</culture>
  <culture name="en-GB">Sweden</culture>
</cultures>

第2行

<cultures>
  <culture name="sv-SE">Norge</culture>
  <culture name="en-GB">Norway</culture>
</cultures>

此查询的预期输出为

Sverige
Norge

当名称为“sv-SE”时

select tblCountry.name.?? --XmlColumn
from tblCountry

2 个答案:

答案 0 :(得分:3)

declare @T table
(
  ID int identity,
  XMLCol xml
)

insert into @T values
('<cultures>
  <culture name="sv-SE">Sverige</culture>
  <culture name="en-GB">Sweden</culture>
</cultures>')

insert into @T values
('<cultures>
  <culture name="sv-SE">Norge</culture>
  <culture name="en-GB">Norway</culture>
</cultures>')

select XMLCol.value('(/cultures/culture[@name="sv-SE"])[1]', 'varchar(20)')
from @T

如果您想要不同的语言而不重写查询,可以使用sql:variable功能。

declare @Lang varchar(5)
set @Lang = 'sv-SE'

select XMLCol.value('(/cultures/culture[@name=sql:variable("@Lang")])[1]', 'varchar(20)')
from @T

答案 1 :(得分:0)

对我来说已经很久了...... 试试:

SELECT xmlCol.query('cultures//culture[@name=sv-SE]')   
FROM   myTable

以下是doc about querying XML columns with SQLServer2005