SQL Server 使用触发器监控数据变更

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 02:52 点击:

 

-- 创建一个t表,来模拟要被监控的数据表  

 

CREATE TABLE t(ID INT IDENTITY(1,1) NOT NULL, aid INT, aname NVARCHAR(20)); 

GO  

 

INSERT INTO t VALUES(101,'AA'); 

GO 

  

--创建另一张表Update_info,用来记录数据变更的详细信息 

  

CREATE TABLE Update_info(Update_id uniqueidentifier,ID INT,aid_update NVARCHAR(128),aid_value int,aname_update NVARCHAR(128), aname_value NVARCHAR(20),Logged_USER NVARCHAR(128),UPDATE_USER NVARCHAR(128),UPDATE_TIME DATETIME); 

GO 

  

--在表格t上创建触发器,当对此表进行更新时,记录信息,并插入到表格Update_info 

  

CREATE TRIGGER mytr ON t FOR UPDATE AS  

 

DECLARE @Update_id AS uniqueidentifier 

  

SET @Update_id= NEWID() 

 

INSERT INTO Update_info(Update_id,ID,aid_update,aid_value,aname_update,aname_value,Logged_USER,UPDATE_USER,UPDATE_TIME) 

  

SELECT @Update_id AS Update_id, A.ID,  

 

(CASE WHEN ISNULL(B.aid,0)=ISNULL(A.aid,0) THEN NULL ELSE 'aid' END) AS aid_update, 

  

(CASE WHEN ISNULL(B.aid,0)=ISNULL(A.aid,0) THEN NULL ELSE A.aid END)  aid_value, 

  

(CASE WHEN ISNULL(B.aname,'')=ISNULL(A.aname,'') THEN NULL ELSE 'aname' END) AS aid_update, 

  

(CASE WHEN ISNULL(B.aname,'')=ISNULL(A.aname,'') THEN NULL ELSE A.aname END)  aid_value, 

  

ORIGINAL_LOGIN() AS Logged_USER, CURRENT_USER AS UPDATE_USER, GETDATE() AS UPDATE_TIME 

  

FROM deleted A INNER JOIN inserted B on A.ID=B.ID 

 

SELECT * FROM Update_info; 

GO 

  

-- 测试  

 

UPDATE t SET aid=102,aname='BB'   

摘自 徐悦 Tech Blog

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • sql常见面试题
      • SQL SERVER 2005性能之跟踪
      • SQL编程(一)
      • LINUX上RMAN自动备份脚本
      • sql server面试题
      • 如何将多个SQL查询统计结果一次显示出来
      • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
      • SQL小技巧系列 --- 行转列合并
      • sql server 列转行
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1