表同步更新的问题的触发器
1sql server 2000 触发器,表同步更新的问题2有三个表,A ,B,C
3A、B表中含有: A1,B1,C1 三个字段,
4C 表中存放A、B表中的A1、B1、C1 的集合,
5字段类型都为nvarchar(10),
6当表A的数据被更新、删除、插入后要反映到C表。
7当表B的数据被更新、删除、插入后要反映到C表。
8假定A,B表中在a1,b1,c1上有唯一索引
9
10
11 这个问题如果纯属从理论来说,是很容易解决的,因为从要求可知,实质上C表存放的数据即为A、B表的并集。可以在A、B表上创建相同的trigger,一旦A、B表上有变化,比如插入、删除或更新时,即清空C表数据,然后把A、B表的数据union后插入C表中即可实现目的:)呵呵呵。。。
12
13 下面的trigger的实现原理是:
14
15 当A表插入数据时,检查C表中是否有A表将要插入的数据,如果无,则将这行数据插入到C表中,反之,则不需要操作。
16
17 当A表update时, 检查B表中是否有更新前这行数据,如果有,则C表中应该保留这行数据且把A表中更新后的数据也插入到C表中去。如果B表中没有A表更新前的这行数据且C表中没有A表更新后的这行数据,则需要用A表更新后的数据来更新C表中与A表更新前这行数据相同的数据;如果B表中没有A表更新的的这行数据且C表中有A表更新后的这行数据,则需要从C表中删除跟A表更新前相同的那行数据(因为更新A表后,A表和B表都没有A表更新前的那行数据了,则这行数据显然在C表中不应该再存在了)。
18
19 当A表中删除时,检查B表是否还存在A表要删除的这行数据,如果有,则不能删除C表中与A表要删除的数据相同的行。反之,则执行删除操作。
20
21
22 B表中的trigger跟A表中的原理相同。
23
24
25CREATE TRIGGER SYNC_C_BY_A
26ON A
27AFTER INSERT,UPDATE,DELETE
28AS
29Declare @Dml TinyInt --
补充:asp教程,高级应用