使用SQL触发器对表的所有操作SQL语句

by 清泉 4. 十二月 2008 20:09
功能说明:
        建立一个log表,要记录如下信息:访问时间,执行的Sql语句,连接的时候使用的哪个Sql登陆用户,客户端的机器名,客户端的IP,客户端的登陆用户(OS的用户),是从查询分析器,还是应用程序来执行的,执行的是Select,Update,还是Delete操作,执行sql语句共花费了多少时间,影响了多少行数据,是否启动了事务,就像事件探测器记录的那些信息一样。使用触发器完成记录各步的操作。

下面是SQL语句及每步的作用说明:
--建立日志表  
  create   table   TbLog(  
  Id   int   not   null   IDENTITY(1,1),  
  EvTime   datetime   not   null   default   (getdate()),                   --访问时间  
  Sql   varchar(3000),                                                                         --执行的Sql语句  
  UserId   varchar(50)   not   null   default   (sUSER_sname()),     --连接的时候使用的哪个Sql登陆用户        
  HostName   varchar(50)   not   null   default   (host_name()),     --客户端的机器名                          
  Ip   varchar(50),                                                                               --客户端的IP                                  
  LoginId   varchar(50),                                                                     --客户端的登陆用户(OS的用户)  
  AppName   varchar(50)   not   null   default(App_Name()),           --是从查询分析器,还是应用程序来执行的                
  OpType   int,                 --执行的是Select,Update,还是Delete操作            
  RowCnt   int,                 --影响了多少行数据                                            
  Trans     bit                   --是否启动了事务                                              
  )  
  go  
   
  --测试表  
  create   table   www.Supidea.com(  
  a   int,  
  b   varchar(10)  
  )  
  go  
   
  --触发器  
  create   trigger   tr_www.Supidea.com   on   www.Supidea.com  
  for   insert,delete,update  
  as  
   
  --RowCnt  
  declare   @Rows   int  
  set   @Rows=@@rowcount  
  set   nocount   on  
  --Sql  
  create   table   #t   (  
  EventType             varchar(20),  
  Parameters   int,  
  EventInfo   varchar(3000)  
  )  
  insert   #t   exec('DBCC   INPUTBUFFER(@@SPID)')  
  --OpType  
  declare   @OpType   int  
  set   @OpType=2                   --update  
  if   not   exists   (select   1   from   inserted)   set   @OpType=3                   --delete  
  if   not   exists   (select   1   from   deleted)   set   @OpType=1                   --delete  
  --Trans  
  declare   @Trans   bit  
  if   @@TRANCOUNT>0  
        set   @Trans=1  
  else  
        set   @Trans=0  
  --insert  
  insert   tbLog   (  
  Sql,  
  OpType,  
  RowCnt,  
  Trans  
  )  
  select   EventInfo,  
  @OpType,  
  @Rows,  
  @Trans  
  from   #t  
  go  
   
  --先在企业管理器输入两条记录  
  --a     b  
  --1     1  
  --2     2  
   
  --再执行语句:  
  insert   www.Supidea.com  
  values(3,'3')  
  go  
   
  insert   www.Supidea.com  
  select   a+3,b+'3'   from   www.Supidea.com  
  go  
   
  BEGIN   TRANSACTION  
   
  update   www.Supidea.com  
  set   a=100,b='100'  
  where   a=3  
   
  COMMIT   TRANSACTION  
  go  
   
  delete   www.Supidea.com  
  where   a=4  
  go  
   
  select   *   from   www.Supidea.com  
  go  
   
  select   *   from   tbLog  
  go   
    
 本文内容引用自 怎样写一个全局触发器,记录所有的操作,包括客户端来源等信息?
原文地址: http://topic.csdn.net/t/20030726/11/2074138.html

Tags:

数据库相关

添加评论



(将显示你的Gravatar头像)  

biuquote
微笑得意调皮害羞酷大笑惊讶发呆喜欢可怜尴尬闭嘴噘嘴皱眉伤心抓狂呕吐坏笑漫骂发怒
Loading



Supidea.com 晨飞的梦 @ All Rights Reserved. Powered by BlogYi.NET ver:1.8.0.0. 苏ICP备09011404号

关于博主

kamau
抱着美好的理想背井离乡,这酸甜苦辣只能默默忍受。既然选择了路,就得风雨兼程……

Calendar

<<  五月 2012  >>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

在日历中查看文章

最近的评论

Comment RSS

声明

      本博所发一切破解相关附件只作学习研究交流之用,严禁用于商业用途,请在下载24小时内删除。
      本博所有网友评论不代表本博立场,版权归其作者所有。

© Copyright 2009