Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2008 Forums
 Transact-SQL (2008)
 need help to SQL on XML

Author  Topic 

Idyana
Yak Posting Veteran

96 Posts

Posted - 2011-12-07 : 05:37:24
My table and data as following,

declare @tItem table
(idx int identity, paymentH int, amt decimal(10,2));

insert into @tItem(paymentH, amt) values(14, 200);
insert into @tItem(paymentH, amt) values(14, 50);
insert into @tItem(paymentH, amt) values(14, 50);
/*the relationship for paymentH to amt is a 1 to many*/


declare @paymentH int
set @paymentH=14
declare @paymentItem xml
set @paymentItem='<data>
<paymentItem><amt>200</amt></paymentItem>
<paymentItem><amt>150</amt></paymentItem>
<paymentItem><amt>30</amt></paymentItem>
</data>'

/*
1. How to updating @tItem with the @paymentItem where paymentH=14?
2. Based on above data, only amt=150 and amt=30 need to be updated
3. The rest is remain and no need to be updated
*/

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2011-12-07 : 05:56:43
[code]
declare @tItem table
(idx int identity, paymentH int, amt decimal(10,2));

insert into @tItem(paymentH, amt) values(14, 200);
insert into @tItem(paymentH, amt) values(14, 50);
insert into @tItem(paymentH, amt) values(14, 50);
/*the relationship for paymentH to amt is a 1 to many*/


declare @paymentH int
set @paymentH=14
declare @paymentItem xml
set @paymentItem='<data>
<paymentItem><amt>200</amt></paymentItem>
<paymentItem><amt>150</amt></paymentItem>
<paymentItem><amt>30</amt></paymentItem>
</data>'

update t
set t.amt = t1.amt
from @tItem t
inner join (select ROW_NUMBER() over (order by @paymentH) AS Rn,
@paymentH AS paymentH,
t.u.value('amt[1]','decimal(10,2)') as amt
from @paymentItem.nodes('/data/paymentItem')t(u)
)t1
on t1.paymentH=t.paymentH
and t1.Rn = t.idx
and t1.amt <> t.amt

select * from @tItem

output
--------------------------------------
idx paymentH amt
1 14 200.00
2 14 150.00
3 14 30.00

[/code]

------------------------------------------------------------------------------------------------------
SQL Server MVP
http://visakhm.blogspot.com/

Go to Top of Page

Idyana
Yak Posting Veteran

96 Posts

Posted - 2011-12-07 : 05:59:12
tq sir. your answer is my inspiration
Go to Top of Page

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2011-12-07 : 06:32:14
wc

------------------------------------------------------------------------------------------------------
SQL Server MVP
http://visakhm.blogspot.com/

Go to Top of Page
   

- Advertisement -