这是我的场景:
--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>`
如您所见,我试图获取每个 OrderCode
的 TrackingNumber
和 DateShipped
并将它们作为属性。意图是选择,而不是更新。
我见过的所有示例都演示了如何使用常量值或变量更新 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