2012-06-28 14 views
7

Mam obecnie ten kod, który przechowuje XML do kolumny typu XML o nazwie dane, w tabeli o nazwie Storage.Niszczenie XML z kolumny tabeli do widoku w SQL Server

CREATE TABLE Storage 
(
    ID INT IDENTITY(1,1) PRIMARY KEY, 
    data XML NOT NULL 
) 

GO 

INSERT INTO Storage(data) 
VALUES('<footballteams> 
    <team manager="Benitez">  
     <name>Liverpool</name>  
     <ground>Anfield</ground> 
    </team> 
    <team manager="Mourinho">  
     <name>Chelsea</name>  
     <ground>Stamford Bridge</ground> 
    </team> 
    <team manager="Wenger">  
     <name>Arsenal</name>  
     <ground>Highbury</ground> 
    </team> 
</footballteams>'); 

Chciałbym utworzyć widok o nazwie Football Zobacz, które strzępy danych i wyświetla je w postaci: FootballView (TeamName, menedżer, uziemienie).

Mam już rozdrobnione pełne dokumenty za pomocą metody .nodes() w kolumnach tabeli, ale wydaje się, że trudniejsze przy tworzeniu widoku (mam powody do korzystania z widoków). Problem polega na tym, że poprzednio właśnie wywoływałem. Węzły na zmiennej @input, która była DECLARE'd jako xml = 'xmlcontent', ale z widokami tego nie da się zrobić, i chcę parsować XML zawarte w kolumnie tabeli Storage.

Wszelkie pomysły? Z góry dziękuję.

EDIT:

Wcześniej gdybym rozdrobnione w tabelach będzie to kod używam:

SELECT  
     TeamName = Foot.value('(name)[1]', 'varchar(100)'),  
     Manager = Foot.value('(@manager)', 'varchar(100)'),  
     Ground = Foot.value('(ground)[1]', 'varchar(100)') 
FROM  
     @input.nodes('/footballteams/team') AS Tbl(Foot) 

EDIT2: Jest to wyjście spodziewam.

Expected Output

+0

Czy umieścisz kod, którego używałeś do niszczenia w kolumnach, a także jak próbowałeś go przekonwertować? –

+1

Zobacz powyższą edycję. – themenace92

+0

Jakich wyników oczekujecie? – Kane

Odpowiedz

11

Trzeba użyć CROSS APPLY

SELECT  
     TeamName = Foot.value('(name)[1]', 'varchar(100)'),  
     Manager = Foot.value('(@manager)', 'varchar(100)'),  
     Ground = Foot.value('(ground)[1]', 'varchar(100)') 
FROM  
    Storage S 
     CROSS APPLY data.nodes('/footballteams/team') AS Tbl(Foot) 

CROSS APPLY i OUTER APPLY pozwalają skutecznie dołączyć do kolekcji XML w bieżącym zestawie danych.

+0

To działa! Dziękuję bardzo: D – themenace92

+0

Moja przyjemność! Chętnie pomoże! –

+0

Czy mogę zapytać, czy różnica między krzyżową i zewnętrzną dotyczy tego, że zewnętrzna będzie również zawierała NULL? – themenace92

Powiązane problemy