这个要求最好不要用触发器,解决方法虽然有,但是很容易出问题最好的解决方法是用事务:
BEGIN TRANSACTION
insert ...
if @@error<>0
begin
ROLLBACK TRANSACTION
return
end
update ...
if @@error<>0
begin
ROLLBACK TRANSACTION
return
end
... --触发器需要的内容
if @@error<>0
begin
ROLLBACK TRANSACTION
return
end
COMMIT TRANSACTION
BEGIN TRANSACTION
insert ...
if @@error<>0
begin
ROLLBACK TRANSACTION
return
end
update ...
if @@error<>0
begin
ROLLBACK TRANSACTION
return
end
... --触发器需要的内容
if @@error<>0
begin
ROLLBACK TRANSACTION
return
end
COMMIT TRANSACTION
不执行,有没有比较好的方法啊
在insert 之后有一个update动作
这两者之间存在时间限制吗?
比如:insert 是在昨天发生的,今天才发生update动作,这个时候触发器执行吗?如果有连续两个insert ,再有一个update,这时触发器执行吗?
如果有一个insert,其后再连续产生两个update,这两个update都要求触发器执行吗?
1.建立一个表tbinfo,用来保存一些状态信息,包括如下字段:
修改状态:记录最近发生过的操作,取值:0 无,1 新增,2 修改,3 删除
时间:记录操作时间
这个表中只有一条记录,每次发生表的操作时都更新.
2.建立如下触发器:
a.插入触发器,记录插入状态:
CREATE TRIGGER [recordinsert] ON [dbo].[你要监控的表]
FOR INSERT
AS
truncate table tbinfo
insert into tbinfo(修改状态,时间) values(1,getdate())b.删除触发器,记录删除状态:
CREATE TRIGGER [recorddelete] ON [dbo].[你要监控的表]
FOR DELETE
AS
truncate table tbinfo
insert into tbinfo(修改状态,时间) values(3,getdate())a.修改触发器,记录修改状态,同时判断前一个动态,如果是新增,则执行相应的处理:
CREATE TRIGGER [recordupdate] ON [dbo].[你要监控的表]
FOR UPDATE
AS
if exists(select * from tbinfo where 修改状态=1)
--如果有时间限制,就用:
--if exists(select * from tbinfo where 修改状态=1 and DATEDIFF ('mm' ,时间 , getdate())<xx)
begin
.....你的处理
end
truncate table tbinfo
insert into tbinfo(修改状态,时间) values(2,getdate())