sql 数据同步问题

jycnet 2006-03-03 09:13:19


各位好!

表一: aaa

列 bbb

jd0001

jd0002

jd0003

jd0004

jd0005

表二: ccc

列 ddd

jd0002jd003

jd0004jd0001jd0005

jd0001jd0003jd0004

jd0002jd0005


说明: 表ccc列ddd 中的数据是由用户选择表aaa列bbb 中的数据循环累加后写入的

问题:当表aaa列bbb中的某一值被删除(如jd0005) ccc表列ddd中的数据同步变化

如:

表二: ccc

列 ddd

jd0002jd003

jd0004jd0001

jd0001jd0003jd0004

jd0002

我用的是笨办法:
SELECT bbb
FROM aaa a CROSS JOIN
ccc b
WHERE (CHARINDEX(a.bbb, b.ddd) > 0)

得到结果后依次与ddd比较,再用replace替换ddd中数据

那位朋友知道有什么快捷简单的办法解决这个问题?

是否要写触发器?
...全文
85 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jycnet 2006-03-03
如果不用触发器,还有什么好办法?
回复
jycnet 2006-03-03
追加一个问题:

表二: ccc

列 ddd

jd0002jd003

jd0004jd0001jd0005

jd0001jd0003jd0004

jd0002jd0005


表三: eee

列 fff

jd0002

jd0004jd0001jd0005

jd0001jd0003

jd0001

如果表二ccc 列ddd 中的jd0001 通过上面的触发器删除了,如何让如果表三eee 列fff

的 jd0001也没有了

如:

表三: eee

列 fff

jd0002

jd0004jd0005

jd0003

NULL

再加50分,大家帮帮忙,多谢多谢
回复
$扫地僧$ 2006-03-03
create table aaa
(
bbb varchar(10)
)

insert aaa select 'jd0001'
insert aaa select 'jd0002'
insert aaa select 'jd0003'
insert aaa select 'jd0004'
insert aaa select 'jd0005'

create table ccc
(
ddd varchar(100)
)


insert ccc select 'jd0002jd003'
insert ccc select 'jd0004jd0001jd0005'
insert ccc select 'jd0001jd0003jd0004'
insert ccc select 'jd0002jd0005'


CREATE TRIGGER TEMP_SC on aaa
AFTER delete
as
Declare T_c cursor for Select bbb from deleted
Declare @bbb varchar(10)
open T_c
fetch next from T_c into @bbb
while @@FETCH_STATUS=0
begin
update ccc set ddd=REPLACE(C.ddd,@bbb,'') from ccc C where charindex(@bbb,C.ddd)>0
fetch next from T_c into @bbb
end
close T_c
deallocate T_c

delete from aaa where bbb in ('jd0005','jd0004')
回复
li_d_s 2006-03-03
用触发器轻松解决,但是如果触发器太多了会影响性能
回复
wgsasd311 2006-03-03
create trigger td_t2 on aaa
for delete
as
update ccc set ddd=replace(ddd,bbb,'')
from ccc a,deleted b where charindex(bbb,ddd)>0
go
回复
尚和空四 2006-03-03
要写触发器的
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-03-03 09:13
社区公告
暂无公告