繁体   English   中英

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

[英]SQL: How can I get the value of an attribute in XML datatype?

我的数据库中有以下 xml:

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

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

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

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

使用 XQuery:

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

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

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

输出:

en
fr

这应该有效:

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)

这在很大程度上取决于您查询文档的方式。 不过,您可以这样做:

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;

在更改您的问题后进行编辑

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM