场景如下:
有以下表: 总金库。字段为:编号,金库。 日志表。字段为:编号,原值,现值,时间。设置编号为标识,时间默认值为getdate()。这2个字段就不需要动了。
目的:
1、不管是在程序中 还是手动修改金库这个数值 必须记录到日志表中。
2、 金库中记录只能保持一条,不能删除,不能新增,只能修改。
3、日志表中记录只能新增,不能删除,不能修改。
下面来实现
1、记录到日志表
create trigger 触发器名称 on 表名 for update --for跟操作类型,这个触发器是针对什么操作的
as
begin
declare @oldvalue float; --变量原值
declare @newvalue float; --变量现值
select @oldvalue=金库 from deleted --读原值
select @newvalue=金库 from inserted --读现值insert into 总金库_记录 (原值,现值) values (@oldvalue,@newvalue) --插入
end
这里面有几个关键点.(1) declare 是声明变量的意思 后面跟变量名和类型 (2) deleted inserted这2个表是MSSQL自动建的临时表 用于记录这个表在触发时的数据,deleted里面记的是原来的数据,inserted记录的是现在改动后的数据.
2、金库中记录只能保持一条,不能删除,不能新增,只能修改
create trigger 触发器名称 on 表名 for insert,delete
as
begin
rollback --回滚
end
3、日志表中记录只能新增,不能删除,不能修改。
create trigger 触发器名称 on 表名 for update,delete
as
begin
rollback --回滚
end