2011-12-11 14 views
7

Tengo una tabla como la siguiente:¿Cómo selecciona el nodo campos XML para todas las filas

YEAR int, 
Fields XML 

Mi columna XML tiene esta estructura para todas las filas, pero con diferentes valores:

enter image description here

How I puede obtener este resultado:

YEAR   ID   NAME    LASTNAME 
--------------------------------------------------- 
2011   1000   Nima    Agha 
2011   1001   Begha    Begha 
2011   1002   Jigha    Jigha 
2011   1003   Aba    Aba 
2012   1034   AAA    BBB 
... 

gracias

Respuesta

10

¿Qué tal esto:

SELECT 
    Year, 
    E.P.value('(ID)[1]', 'INT') AS 'ID', 
    E.P.value('(Name)[1]', 'VARCHAR(50)') AS 'Name', 
    E.P.value('(LastName)[1]', 'VARCHAR(50)') AS 'LastName' 
FROM 
    dbo.YourTable 
CROSS APPLY 
    Fields.nodes('/Employees/Person') AS E(P) 

Básicamente, se está seleccionando Year de la tabla base y luego extraer cada <Person> nodo de la columna de Fields en una "tabla XML en línea" llamada E con una sola columna XML llamado P (puede elegir los nombres que desee para ellos) que nuevamente consulta y extrae los elementos individuales.

+0

That's Greate .Gracias – Arian

+0

¿hay alguna manera de seleccionar mis campos sin 'CROSS APPLY'? Quiero crear una vista de índice basada en esto seleccione – Arian

+0

@Nima: no. CROSS APPLY es la manera de obtener ** todos ** elementos XML almacenados en una columna XML. No sé de ninguna otra manera –

Cuestiones relacionadas