2011-03-02 22 views
1

是否有某種方式到SQL Server查詢的SELECT子句中從XML列變換/項目XML?Sql Server的XQuery轉換XML在SELECT子句

可以說我們有一個ID爲:Guid,Data:XML的表。

而且可以說,我們已經在「數據」一欄下面的數據:

<Order> 
    <Details> 
    <Detail> 
     <Quantity>10</Quantity> 
     <ItemPrice>20</Quantity> 
    </Detail> 
    <Detail> 
     <Quantity>10</Quantity> 
     <ItemPrice>20</Quantity> 
    </Detail> 
    </Details> 
</Order> 

有沒有辦法預測這(使用select +的XQuery)進入,例如說:

<Order> 
    <Details> 
    <Detail> 
     <LineTotal>200</LineTotal> 
    </Detail> 
    <Detail> 
     <LineTotal>200</LineTotal> 
    </Detail> 
    </Details> 
</Order> 

我不感興趣,如何能在我的應用程序的內存中完成,我想在SELECT子句中的服務器端轉換的SQL查詢。

+1

你的意思'的''而不是20 ' – RichardTheKiwi 2011-03-02 08:05:12

回答

5

正好產生你想要的輸出,但SQL Server XML是相當有限的。在這個例子中,你真的需要知道如何(重新)產生整個樹 - 與變化「手工編碼」。

declare @tbl table (id uniqueidentifier, data xml) 
insert @tbl select newid(), ' 
<Order> 
    <Details> 
    <Detail> 
     <Quantity>10</Quantity> 
     <ItemPrice>20</ItemPrice> 
    </Detail> 
    <Detail> 
     <Quantity>10</Quantity> 
     <ItemPrice>20</ItemPrice> 
    </Detail> 
    </Details> 
</Order>' 

select ((
    select d.d.value('(Quantity)[1]','int') * d.d.value('(ItemPrice)[1]','int') [LineTotal] 
    from ds.ds.nodes('Detail') d(d) 
    for xml path('Detail'), type)) Details 
from @tbl t 
cross apply data.nodes('Order/Details') ds(ds) 
for xml path('Order')