2011-01-25 14 views
5

kullanarak bir XMLTYPE sütuntan seçerken sütun adı nasıl kaldırılır 'InvoiceXML' adlı bir XMLTYPE sütun içeren bir tablonun var.FOR XML FORMU

bu sütunda veri şeklinde XML'dir:

<Invoice CustomerNum="1234" > 
<CustomDeliveryDetails /> 
</Invoice> 

ben ile bitirmek bir

SELECT ... FOR XML PATH(''), ROOT('Invoices') 

yaptığınızda:

<Invoices> 
<InvoiceXML> 
    <Invoice CustomerNum="1234" > 
    <CustomDeliveryDetails /> 
    </Invoice> 
</InvoiceXML> 
</Invoices> 

nasıl durdururum InvoiceXML çıktı olarak görünen sütun adı?

cevap

1

Dene:

SELECT cast(cast(InvoiceXML as nvarchar(max)) + '' as XML) 
FROM whatever 
FOR XML PATH(''), ROOT('Invoices') 
+0

Bir dizeyi doğrudan bir XML sütununa bağlamanıza izin verdiğinizi düşünmeyin. Döküm (cast) (invoiceXML, nvarchar (max)) + '' XML olarak) ' –

+0

+1 Daha fazla inceleme yaptıktan sonra, daha da basitleştirilebileceğini düşünüyorum. Ben cast (XML olarak InvoiceXML) 'yeterli gibi görünüyor. –

+0

Nvarchar (max) için cast uzunluk kısıtlamaları nedeniyle temelde XML türünü kırdığı için yeterli temsilcisi varsa downvote ediyorum. varchar (max), nvarchar (max) ve xml 2GB depolayabilir ancak nvarchar karakter başına 2x depo kullanır. Referanslar: http://technet.microsoft.com/en-us/library/ms186939.aspx ve http://msdn.microsoft.com/en-us/library/ms187339.aspx – rainabba

0

bu deneyin:

SELECT InvoiceXML.query('//Invoice') 
    FROM <YOUR_TABLE> 
FOR XML PATH('') 
FPR XML PATH olarak faturalandırma yapmak bir xpath sorgusu belirtmeyi deneyin örn: `XML PATH İÇİN ('// InvoiceXML') `
+0

Bu işe yarıyor mu? Denediğimde bana şunu veriyor: 'Satır adı '// InvoiceXML' XML için gerekli olan geçersiz bir XML tanımlayıcısı içerir; '/' (0x002F), hatadaki ilk karakterdir. 'Çift eğik çizginin çıkarılması, her satırın iki kez kaydırılması' 'ile sonuçlanır. – Tadmas

+0

Cevabın önceki sürümünü test etmediniz, doğrulamada başarısız oldu :). Yayını çalışma sürümü ile güncellendi. Thx – Chandu

4
declare @T table (invoiceXML xml) 

insert into @T values (
    '<Invoice CustomerNum="1234" > 
    <CustomDeliveryDetails /> 
    </Invoice> 
    ') 

insert into @T values (
    '<Invoice CustomerNum="4321" > 
    <CustomDeliveryDetails /> 
    </Invoice> 
    ') 

select (select T.invoiceXML) 
from @T as T 
for xml path(''), root('Invoices') 

düzenleme 1 Alt sorguda (select T.invoiceXML) hiçbir sütun adı yoktur, bu nedenle kaldırılır.

+0

Güzel. Muhtemelen çözümünüzün neden işe yaradığını da eklemelisiniz: alt sorguya herhangi bir isim verilmez, bu nedenle, içerdiği öğeye konulacak bir sütun adı yoktur ve bu da kaldırılmasına neden olur. – Tadmas

+0

Teşekkürler, bunu yapacağım. –