问题: 一个XML文件 <Buy BuyTime="2007-2-18"> <BuyDetail BuyDetailID=1 BuyDetailName="物品1" /> <BuyDetail BuyDetailID=2 BuyDetailName="物品1" /> </Buy> 请问如何实现一条一条子节点遍历Buy/BuyDetail的属性。 然后逐行更新BuyDetail表中BuyDetailID等于XML相对应的BuyDetailID属性的记录呢?
回答: declare @a int declare @doc1 nvarchar(1000) set @doc1='' set @doc1=' <Buy BuyTime="2007-2-18"> <BuyDetail BuyDetailID="1" BuyDetailName="物品1" /> <BuyDetail BuyDetailID="2" BuyDetailName="物品1" /> </Buy> ' exec sp_xml_preparedocument @a OUTPUT, @doc1
SELECT * into #a FROM OPENXML (@a, 'Buy/BuyDetail',1) WITH (BuyDetailID varchar(10), BuyDetailName varchar(20))
-- create table BuyDetail( BuyDetailID int,BuyDetailName varchar(100)) -- insert into BuyDetail select 1,'222' -- union all select 2,'ccc'
update BuyDetail set BuyDetailName=a.BuyDetailName from #a as a,BuyDetail as b where a.BuyDetailID=b.BuyDetailID
drop table #a  |