2014-11-14 72 views
0

我使用此查詢:SQL Server - FOR XML PATH:如何將xmlns:xsd添加到根元素?

select 
    SalesOrderID, OrderDate, DueDate, rowguid 
from 
    Sales.SalesOrderHeader 
where 
    SalesOrderID between 43661 and 43662 
for xml path('Order'), Root('AllOrders') 

的這個輸出是:

<AllOrders> 
    <Order> 
    <SalesOrderID>43661</SalesOrderID> 
    <OrderDate>2005-07-01T00:00:00</OrderDate> 
    <DueDate>2005-07-13T00:00:00</DueDate> 
    <rowguid>D91B9131-18A4-4A11-BC3A-90B6F53E9D74</rowguid> 
    </Order> 
    <Order> 
    <SalesOrderID>43662</SalesOrderID> 
    <OrderDate>2005-07-01T00:00:00</OrderDate> 
    <DueDate>2005-07-13T00:00:00</DueDate> 
    <rowguid>4A1ECFC0-CC3A-4740-B028-1C50BB48711C</rowguid> 
    </Order> 
</AllOrders> 

我想這是預期輸出(xmlns:xsd加):

<AllOrders xmlns:xsd="some schema URL"> 
    <Order> 
    <SalesOrderID>43661</SalesOrderID> 
    <OrderDate>2005-07-01T00:00:00</OrderDate> 
    <DueDate>2005-07-13T00:00:00</DueDate> 
    <rowguid>D91B9131-18A4-4A11-BC3A-90B6F53E9D74</rowguid> 
    </Order> 
    <Order> 
    <SalesOrderID>43662</SalesOrderID> 
    <OrderDate>2005-07-01T00:00:00</OrderDate> 
    <DueDate>2005-07-13T00:00:00</DueDate> 
    <rowguid>4A1ECFC0-CC3A-4740-B028-1C50BB48711C</rowguid> 
    </Order> 
</AllOrders> 

做我什麼修改通過查詢來實現上述輸出?

回答

3

您可以使用XMLNAMESPACES;

WITH XMLNAMESPACES ('http://foo.com/bar' AS xsd) 
select SalesOrderID,OrderDate,DueDate... 
1

一般來說,你總是可以轉換爲nvarchar(max)並做文本替換。

這意味着你可以做這樣的

select replace(cast((
    select SalesOrderID,OrderDate,DueDate,rowguid from Sales.SalesOrderHeader 
    where SalesOrderID between 43661 and 43662 
    for xml path('Order'), Root('AllOrders') 
) as nvarchar(max)), N'<AllOrders>', N'<AllOrders xmlns:xsd="http://foo.com/bar">') 

雖然我更希望你@AlexK

做到按建議