日期:2014-05-19  浏览次数:20394 次

表更新问题
现有表T1   ,   有字段:AT,A,BT,B,ID
        表T2,     有字段:DT,D,ID
拿T2的数据更新T1:如果DT=1   侧:AT=AT+DT,A=A+D
                                                如果DT=2   侧:BT=BT+DT,B=B+D  
                                                更新条件为:ID=ID
我是这样写的:update   T1   set   AT=case   when   D=1   then   AT+1   else   AT   end,
                                                      A=case   when     D=1   then   A+D   else   A   end   ,
                                                      BT=case   when   D=2   then   BT+1   else   AT   end,
                                                      B=case   when     D=2   then   B+D   else   A   end  
                          from   T1   left   outer   join     on   T2   T1.ID=T2.ID
可是更新后的结果为:要么只更新到AT\A,要么只更新到BT\B,是什么原因呢?

------解决方案--------------------
你的需求本來就是,如果DT = 1,那麼就更新AT和A,如果DT=2,就更新BT和B啊。

所以“要么只更新到AT\A,要么只更新到BT\B”,這沒有什麼不對啊。
------解决方案--------------------
declare @t1 table(AT int,A int,BT int,B int,ID int)
insert @t1 select 0, 0, 0, 0, 1
declare @t2 table(DT int,D int,ID int)
insert @t2
select 1, 2, 1 union all
select 2, 3, 1
----更新
UPDATE a SET
AT = AT + (select DT from @t2 where ID = a.ID and DT = 1 ),
A = A + (select D from @t2 where ID = a.ID and DT = 1),
BT = BT + (select DT from @t2 where ID = a.ID and DT = 2),
B = B + (select D from @t2 where ID = a.ID and DT = 2)
FROM @t1 AS a

----查看
select * from @t1

/*结果
AT A BT B ID
----------- ----------- ----------- ----------- -----------
1 2 2 3 1
*/