SQL: How can i get the value of an attribute in XML datatype

ThdK picture ThdK · Jan 10, 2012 · Viewed 81.8k times · Source

I have the following xml in my database:

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

I'm using something like this now: but still have to find the attribute value

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

How can i get the value of the language attribute in my select statement with SQL?

Answer

Kirill Polishchuk picture Kirill Polishchuk · Jan 10, 2012

Use 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

Output:

en
fr