2012-06-28 15 views
7

Şu anda XML adlı XML'de depo adı verilen bir veritabanında veriyi depolayan bu koda sahibim.SQL Server'daki bir tabloya tablo sütunundan XML aktarma

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>'); 

ben biçimde veri ve görüntüler onu imha eder Futbol Görünüm adlı bir görünüm oluşturmak istiyorum: FootballView (Takım adı, Yönetici, Toprak).

Daha önce tablo sütunlarına .nodes() yöntemini kullanarak tam belgeleri parçalara ayırdım, ancak bir görünüm oluştururken daha zorlayıcı görünüyor (görünüm kullanma nedenlerim var). Sorun şu ki, daha önce sadece xml = 'xmlcontent' olarak DECLARE'd olan bir değişken @ girişine denedim, ancak bu görülemez yapılamaz ve Depolama tablosu sütunundaki XML'yi ayrıştırmak istiyorum.

Herhangi bir fikrin var mı? Şimdiden teşekkürler.

DÜZENLEME:

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: Ben tablolarına rendelenmiş olsaydı

Önceden, bu kullandığım kod olurdu Bu beklediğim çıkıştır.

Expected Output

+0

Sütuna parçalamak için kullandığınız kodu ve ayrıca dönüştürmeyi denemeye nasıl başladığınızı da kaydeder misiniz? –

+1

Yukarıdaki düzenlemeye bakın. – themenace92

+0

Hangi çıktı bekliyorsunuz? – Kane

cevap

11

Sen 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 ve OUTER APPLY etkili geçerli veri setinde bir XML koleksiyonuna katılmasına izin kullanmak gerekir.

+0

Çalışıyor! Çok teşekkür ederim: D – themenace92

+0

My Pleasure! Memnuniyetle yardım ettim! –

+0

Sorabilir miyim? Dış ve dış arasındaki fark, dış NULL'ları da içerecek mi? – themenace92

İlgili konular