好象只有用if update(a1)
begin
end
if update(a2)
begin
end
.
.
.
的方式,我用动态sql生成也不能执行。
总是说
Server Message: Number 140, Severity 15
Server 'local', Line 1:
Can only use IF UPDATE within a CREATE TRIGGER.
呵呵。看来只有写很多个段了。
你没有给你的表结构说明,我给你个例子,但愿对你有所帮助
假如有两个表
create table a(a1 int,a2 int)
create table b(b1 int,b2 char(20))
在a表上分别建立insert,update和delete触发器,当然你也可以组合起来用
-----insert
create trigger t_a_i on a
for insert
as
declare
@rows int
select @rows=@@rowcount ---把@@rowcount记录下来,防止变化
if @@rowcount<1 return ---没有插入
if exists(select * from inserted) and @@rowcount>=1 ---有插入
insert into b select I.a1,'Inserted' from inserted I --做相应的处理(inserted)
return
------delete
create trigger t_a_d on a
for delete
as
declare
@rows int
select @rows=@@rowcount ---把@@rowcount记录下来,防止变化
if @@rowcount<1 return ---没有删除
if exists(select * from deleted) and @@rowcount>=1 --有删除
insert into b select D.a1,'Deleted' from deleted D --做相应的处理(deleted)
return
----update
----因为update就是先delete,然后insert
create trigger t_a_u on a
for update
as
declare
@rows int
select @rows=@@rowcount ---把@@rowcount记录下来,防止变化
if @@rowcount<1 return ---没有修改
if update(a1) --修改了第一个字段a1,你也可以判断其他的条件
begin
if exists(select * from deleted) and @rows>=1 --修改以前的值
insert into b select D.a1,'Update Old' from deleted D
if exists(select * from inserted) and @rows>=1 --修改以后的值
insert into b select I.a1,'Update New' from inserted I
end
return