SQL: Comment puis-je obtenir la valeur d'un attribut dans XML datatype
j'ai le xml suivant dans ma base de données:
<email>
<account language="en" ... />
</email>
j'utilise quelque chose comme ça maintenant: mais je dois quand même trouver la valeur de l'attribut
SELECT
convert(xml,m.Body).query('/Email/Account')
FROM Mail
Comment puis-je obtenir la valeur de l' language
attribut dans ma déclaration select avec SQL?
20
demandé sur
Kirill Polishchuk
2012-01-10 22:41:13
3 réponses
Use 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
Sortie:
en
fr
33
répondu
Kirill Polishchuk
2012-01-10 18:54:13
Cela devrait fonctionner:
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)
7
répondu
Bassam Mehanni
2012-01-10 18:48:00
cela dépend beaucoup de la façon dont vous interrogez le document. Vous pouvez faire ceci:
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;
EDIT après modifications à votre question.
2
répondu
Yuck
2012-01-10 18:55:44