利用SQL Server触发器实现表的历史修改痕迹记录


当前第2页 返回上一页

针对插入(insert)操作,增加名为tr_product_i的触发器:

CREATE TRIGGER tr_product_i
ON product
AFTER INSERT
AS
if @@rowcount = 0 --为了避免占用资源,当影响行数为0时,结束触发器
 return
insert into product_log (name,description,unit_cost,pub_time,sqlcomm,exectime)
 select name,description,unit_cost,pub_time,'insert',getdate() from inserted
GO

针对更新(update)操作,增加名为tr_product_u的触发器:

CREATE TRIGGER tr_product_u
ON product
AFTER UPDATE
AS
if @@rowcount = 0 --为了避免占用资源,当影响行数为0时,结束触发器
 return
/*更新前*/
insert into product_log (name,description,unit_cost,pub_time,sqlcomm,exectime)
 select name,description,unit_cost,pub_time,'update',getdate() from deleted
/*更新后*/
insert into product_log (name,description,unit_cost,pub_time,sqlcomm,exectime)
 select name,description,unit_cost,pub_time,'update',getdate() from inserted
GO

针对删除(delete)操作,增加名为tr_product_d的触发器:

CREATE TRIGGER tr_product_d
ON product
AFTER DELETE
AS
if @@rowcount = 0 --为了避免占用资源,当影响行数为0时,结束触发器
 return
insert into product_log (name,description,unit_cost,pub_time,sqlcomm,exectime)
 select name,description,unit_cost,pub_time,'delete',getdate() from deleted
GO

3.测试触发器

插入(insert)测试

INSERT INTO product(name,description,unit_cost,pub_time)
 VALUES('逗比','这是一个逗比的测试数据',200.5,'1990-11-18')
GO

SELECT * FROM product
SELECT * FROM product_log
GO

更新(update)测试

UPDATE product SET unit_cost=250.0 WHERE name='逗比'
GO

SELECT * FROM product
SELECT * FROM product_log
GO

删除(delete)测试

DELETE FROM product WHERE name='逗比'
GO

SELECT * FROM product
SELECT * FROM product_log
GO

好了这篇文章就介绍到这了,需要的朋友可以参考一下。

更多SQL内容来自木庄网络博客


标签:SQL

返回前面的内容

相关阅读 >>

sql注入攻击的原理

sql表连接图解

mysql缓存的查询和清除命令使用详解

探讨如何计算age的sql函数

oracle数据库ora-12560错误问题的解决办法

.net framework sql server 数据提供程序连接池

sql点滴24 监测表的变化

sql的临时表使用小结

sql实现split函数的脚本

mysql数据库之索引详细介绍

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...