日期:2014-05-18  浏览次数:20361 次

数据联动的问题
当某条数据的值在改变的时候,与之相关的有某些联系的一些数据也在同时改变。。例如

id       name     deep       value
1         a             9             50
2         a1           7             150
3         a2           8             250
4         b3           9             510
5         a4           3             501
6         a5           4             502
6         a6           5             503
7         b             6             503

例如上表,   如果   id   =1   的   value   从50---〉100

name   包含   a     的说有数据   value   都   增加     100*0.1
    deep   =   9       的说有数据   value   都   增加     100*0.2

怎么完成上面的操作,思路即可。。

存储过程?出发器。还是在程序中判断?   因为要变动的数据可能比较多

------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(id int,name varchar(10),deep int,value decimal(18,2))
insert into tb(id,name,deep,value) values(1, 'a ' , 9, 50)
insert into tb(id,name,deep,value) values(2, 'a1 ', 7, 150)
insert into tb(id,name,deep,value) values(3, 'a2 ', 8, 250)
insert into tb(id,name,deep,value) values(4, 'b3 ', 9, 510)
insert into tb(id,name,deep,value) values(5, 'a4 ', 3, 501)
insert into tb(id,name,deep,value) values(6, 'a5 ', 4, 502)
insert into tb(id,name,deep,value) values(6, 'a6 ', 5, 503)
insert into tb(id,name,deep,value) values(7, 'b ' , 6, 503)
go

update tb
set tb.value = tb.value + 100*0.1
from tb , (select * from tb where id = 1) t
where tb.name = t.name and tb.id <> 1

update tb
set tb.value = tb.value + 100*0.2
from tb , (select * from tb where id = 1) t
where tb.deep = t.deep and tb.id <> 1

select * from tb

drop table tb

/*
id name deep value
----------- ---------- ----------- --------------------
1 a 9 50.00
2 a1 7 150.00
3 a2 8 250.00
4 b3 9 530.00
5 a4 3 501.00
6 a5 4 502.00
6 a6 5 503.00
7 b 6 503.00

(所影响的行数为 8 行)

*/

------解决方案--------------------
1.
如果1 a 9 50這一條變化了,
那麼2 a1 7 150,應該包含a,那麼這條會變化,
然後所有 name 包含 a1 的所有数据 value 都 增加 100*0.1
deep = 7 的所有数据 value 都 增加 100*0.2,
一直循環到沒有滿足條件的數據嗎?


2.
如果1 a 9 50這一條變化了,
某條數據name 包含a,deep = 9,那麼應該怎麼變化?