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

时间:2012-01-10 18:41:13

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

我的数据库中有以下xml:

<email>
  <account language="en" ... />
</email>

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

 SELECT
convert(xml,m.Body).query('/Email/Account')
 FROM Mail

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

4 个答案:

答案 0 :(得分:38)

使用XQuery:

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

select @xml.value('(/email/account/@language)[1]', 'nvarchar(max)')

declare @t table (m ntext)

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



select cast(m as xml) .value('(/email/account/@language)[1]', 'nvarchar(max)' )
from @t

输出:

en
fr

答案 1 :(得分: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)

答案 2 :(得分:4)

这很大程度上取决于您如何查询文档。但是你可以这样做:

CREATE TABLE #example (
   document NText
);
INSERT INTO #example (document)
SELECT N'<email><account language="en" /></email>';

WITH XmlExample AS (
  SELECT CONVERT(XML, document) doc
  FROM #example
)
SELECT
  C.value('@language', 'VarChar(2)') lang
FROM XmlExample CROSS APPLY
     XmlExample.doc.nodes('//account') X(C);

DROP TABLE #example;
更改问题后

编辑

答案 3 :(得分:1)

如果xml数据作为字符串列存储在sql server中,则使用cast

select cast(your_field as XML)
       .value('(/email/account/@language)[1]', 'varchar(20)') 
from your_table