2011-12-11 14 views
7

Ho una tabella come questa:Come selezionare il nodo campi XML per tutte le righe

YEAR int, 
Fields XML 

mia colonna XML ha questa struttura per tutte le righe, ma con valori diversi:

enter image description here

Come può ottenere questo risultato:

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

grazie

risposta

10

ne dite di questo:

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) 

Stai fondamentalmente selezionando Year dalla tabella di base e poi l'estrazione di ciascun nodo <Person> dalla colonna Fields in una "tabella XML inline" chiamato E con una sola colonna XML chiamato P (puoi scegliere i nomi che preferisci per quelli) che richiedi ed estrai nuovamente i singoli elementi.

+0

Questo è Greate. Grazie – Arian

+0

c'è un modo per selezionare i miei campi senza 'CROSS APPLY'? Voglio creare una vista indice in base a questa selezione – Arian

+0

@Nima: no. CROSS APPLY è il modo per andare a prendere ** tutti ** gli elementi XML memorizzati in una colonna XML. Non so in altro modo –

Problemi correlati