2011-01-25 28 views
5

我有一個名爲'InvoiceXML'的XMLTYPE列的表格。如何使用FOR XML從XMLTYPE列中選擇時刪除列名稱PATH

此列中的數據是XML形式:

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

當我做了

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

我結束了:

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

如何制止列名稱InvoiceXML出現在輸出中?

回答

1

嘗試:

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

不要以爲您可以將字符串直接連接到XML列。你需要加倍轉換:`cast(將XML(InvoiceXML作爲nvarchar(max))+''轉換爲XML)` – 2011-01-25 14:40:38

+0

+1經過進一步的審查,我認爲它可以進一步簡化。我看起來像`cast(InvoiceXML as XML)`就足夠了。 – 2011-01-25 20:54:12

+0

如果我有足夠的代表,我會downvote,因爲由於長度限制,轉換爲nvarchar(max)會從根本上破壞XML類型。 varchar(max),nvarchar(max)和xml可以存儲2GB,但nvarchar使用每個字符2倍的存儲量。參考:http://technet.microsoft.com/en-us/library/ms186939.aspx和http://msdn.microsoft.com/en-us/library/ms187339.aspx – rainabba 2013-10-01 00:59:36

0

嘗試這種情況:

SELECT InvoiceXML.query('//Invoice') 
    FROM <YOUR_TABLE> 
FOR XML PATH('') 
嘗試指定一個XPath查詢在FPR XML PATH發票 例如:`FOR XML PATH( '// InvoiceXML') `
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') 

編輯1子查詢(select T.invoiceXML)沒有列名,因此將其刪除。

相關問題