使用触发器执行数据删除自动备份

打算写个记录删除自动备份的触发器,即在执行表中记录删除时,自动把记录保存到和这个表结构相同的表中,写法如下。
CREATE TRIGGER tc_plateStat_deleteBak ON tc_plateStat
FOR delete
AS
declare
@id uniqueidentifier,
@ChkStaID int,
@CamID tinyint,
@StatDate datetime,
@StatCount int,
@Uploaded tinyint,
@DealFlag tinyint
select @id=id,@ChkStaID=ChkStaID,@CamID=CamID
,@StatDate=StatDate,@StatCount=StatCount,@Uploaded=Uploaded,@DealFlag=DealFlag
from deleted
insert into tc_plateStat_Bak values(@id,@ChkStaID,@CamID,@StatDate,@StatCount,@Uploaded,@DealFlag)
但是,当执行多条记录删除时,只备份了一条记录,于是修改如下:
CREATE TRIGGER tc_plateStat_deleteBak ON tc_plateStat
FOR delete
AS
insert into tc_plateStat_Bak select * from deleted
功能实现了,而且很简单。


但是deleted、updated不支持image数据类型或者大文本数据类型
上述方法对执行大数据的备份不能执行,修改代码如下:
ALTER TRIGGER [dbo].[tc_plate_deleteBak] ON [dbo].[Table_1]
instead of delete
AS
insert into Table_2 select * from Table_1
delete from Table_1 where id in (select id from deleted)
但是这种方式适合与全表的删除操作。


于是修改如下:
ALTER   TRIGGER [dbo].[tc_plate_deleteBak] ON [dbo].[Table_1]
instead of delete
AS
declare @id int
declare cursor1 cursor for select id  from deleted
open cursor1
fetch next from cursor1 into @id
while @@fetch_status=0
begin
insert into Table_2  select * from Table_1 where id=@id
delete from Table_1 where id =@id
fetch next from cursor1 into @id
end
close cursor1
deallocate cursor1
好了,达到目的了。

你可能感兴趣的:(触发器)