这是我的场景:

--ORDER table 
OrderID OrderCode DateShipped    ShipmentXML 
1       ABC       08/06/2013     <Order><Item CustomerName="BF" City="Philadelphia" State="PA"></Item></Order> 
2       XYZ       08/05/2013     <Order><Item CustomerName="TJ" City="Richmond" State="VA"></Item></Order> 

在此过程中的某个时刻,我会知道这些订单各自的 TrackingNumber。跟踪号码在另一个表格中可用,如下所示:

 --TRACKING table 
 TrackingID    OrderCode   TrackingNumber     
 98            ABC         1Z1                
 99            XYZ         1Z2 

我期望的输出如下:

   OrderID OrderCode     ShipmentXML 
   1       ABC           <Order><Item CustomerName="BF" City="Philadelphia" State="PA" DateShipped="08/06/2013" TrackingNumber="1Z1"></Item></Order> 
   2       XYZ           <Order><Item CustomerName="TJ" City="Richmond" State="VA" DateShipped="08/05/2013" TrackingNumber="1Z2"></Item></Order>` 

如您所见,我试图获取每个 OrderCodeTrackingNumberDateShipped 并将它们作为属性。意图是选择,而不是更新。

我见过的所有示例都演示了如何使用常量值或变量更新 XML。我找不到一个演示使用 JOIN 进行 XML 更新的程序。请帮助解决这个问题。

更新:

“选择不更新”是指不更新永久表;临时表上的更新非常好,正如 Mikael 在第一个答案下方评论的那样。

请您参考如下方法:

使用临时表将属性添加到 XML 的版本。

select OrderID, 
       OrderCode, 
       DateShipped, 
       ShipmentXML 
into #Order 
from [Order] 
 
update #Order 
set ShipmentXML.modify 
  ('insert attribute DateShipped {sql:column("DateShipped")}  
    into (/Order/Item)[1]') 
 
update O 
set ShipmentXML.modify 
  ('insert attribute TrackingNumber {sql:column("T.TrackingNumber")}  
    into (/Order/Item)[1]') 
from #Order as O 
  inner join Tracking as T 
    on O.OrderCode = T.OrderCode 
 
select OrderID, 
       OrderCode, 
       ShipmentXML 
from #Order 
 
drop table #Order 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!