tipos tabla recuperar nodos leer datos atributos sql xml sql-server-2008 tsql xquery

sql - tabla - tipos de datos xml



SQL: ¿Cómo puedo obtener el valor de un atributo en el tipo de datos XML? (3)

Depende mucho de cómo esté consultando el documento. Sin embargo, puedes hacer esto:

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;

EDITAR después de los cambios a su pregunta.

Tengo el siguiente xml en mi base de datos:

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

Estoy usando algo como esto ahora: pero todavía tengo que encontrar el valor del atributo

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

¿Cómo puedo obtener el valor del atributo de language en mi declaración de selección con SQL?


Esto debería funcionar:

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)


Utilice 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

Salida:

en fr