读书人

数据联动的有关问题

发布时间: 2012-02-25 10:01:48 作者: rapoo

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

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,那怎化?
情是否存在?
------解决方案--------------------


用触发器
create triger update_table on talbe
as
declare strsql varchar(100)
set strsql= "update table set value=100*0.1 where name like '% " + INSERTED.name + "% ' "
exec(strsql)
update table set value=100*0.2 where deep =INSERTED.deep

读书人网 >SQL Server

热点推荐