SQL: Как я могу получить значение атрибута в XML-типе данных
У меня есть следующий xml в моей базе данных:
<email>
<account language="en" ... />
</email>
Теперь я использую что-то вроде этого: но все равно нужно найти значение атрибута
SELECT
convert(xml,m.Body).query('/Email/Account')
FROM Mail
Как я могу получить значение атрибута language
в моей инструкции select с SQL?
Ответы
Ответ 1
Используйте 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
Ответ 2
Это должно работать:
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)
Ответ 3
Это зависит от того, как вы запрашиваете документ. Вы можете сделать это, хотя:
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;
ИЗМЕНИТЬ после изменения вашего вопроса.