我的数据库中有以下xml:
<email>
<account language="en" ... />
</email>
我现在正在使用这样的东西:但仍需要找到属性值
SELECT
convert(xml,m.Body).query('/Email/Account')
FROM Mail
如何使用SQL获取select语句中language
属性的值?
答案 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