SQL:如何获取XML数据类型中的属性值

Thd*_*hdK 28 xml sql t-sql xquery sql-server-2008

我的数据库中有以下xml:

<email>
  <account language="en" ... />
</email>
Run Code Online (Sandbox Code Playgroud)

我现在正在使用这样的东西:但仍然需要找到属性值

 SELECT
convert(xml,m.Body).query('/Email/Account')
 FROM Mail
Run Code Online (Sandbox Code Playgroud)

如何language使用SQL在select语句中获取属性的值?

Kir*_*huk 46

使用XQuery:

declare @xml xml =
'<email>
  <account language="en" />
</email>'

select @xml.value('(/email/account/@language)[1]', 'nvarchar(max)')
Run Code Online (Sandbox Code Playgroud)
declare @t table (m xml)

insert @t values 
    ('<email><account language="en" /></email>'), 
    ('<email><account language="fr" /></email>')

select m.value('(/email/account/@language)[1]', 'nvarchar(max)')
from @t
Run Code Online (Sandbox Code Playgroud)

输出:

en
fr
Run Code Online (Sandbox Code Playgroud)

  • @InterfaceUnknown,这称为“默认命名空间”。像这样的事情:在`select`命令之前设置命名空间,如下所示:`WITH XMLNAMESPACES ('http://domain.com/ws/2016-08-07' as x)`。然后您可以在选择查询中添加对此命名空间的引用:`'(/x:email/x:account/@language)[1]'` (2认同)

Bas*_*nni 9

这应该工作:

DECLARE @xml XML

SET @xml = N'<email><account language="en" /></email>'

SELECT T.C.value('@language', 'nvarchar(100)')
FROM @xml.nodes('email/account') T(C)
Run Code Online (Sandbox Code Playgroud)