我想要把引起触发器的SQL保存下来,以跟踪一些状态, 但是我怎么样取得当前执行的是哪句SQL呢????有没有这样的函数(EX: @@TextData?),或是那个表中有刚执行过的语句(类似oracle)?谢谢了,各位大虾!!!!

解决方案 »

  1.   

    可以
    1 用dbcc inputbuffer(spid)得到进程id为spid的执行sql
    参数为进程的id可以通过查询master..sysprocesses得到,当前的进程id为@@SPID
    2 但是觉得你没有必要用触发器,你可以建立一个trace
      

  2.   

    1. 我要实现的功能是把修改指定表中的字段的SQL记录下来.以检查不正确的修改及可能出错的地方.这个是要长期在客户机器上运行,所以不能用trace...Trace也会让客户的服务器动不了2.用 DBCC InputBuffer(spid), 我只用来取当前进程的.所以这样的话取到的总会是DBCC inpurtBuffer(@@spid)有没有其它方法,谢谢了.
      

  3.   

    用dbcc inputbuffer(spid)得到进程id为spid的执行sql
    参数为进程的id可以通过查询master..sysprocesses得到,当前的进程id为@@SPID
    2 但是觉得你没有必要用触发器,你可以建立一个trace
      

  4.   

    1 你在其他进程里比如自己在服务器上的监视进程 用啊
    2 trace的跟踪条件你可以自己选择,表可以自己维护而且也不至于服务器动不了
    3 你也可以查看数据库的日志文件
    4 如果你只是监视某些表的操作,你可以在触发器里记录下deleted临时表和当前的值,select到日志表以分析观察
      

  5.   

    谢谢firetoucher(风焱) !1.我最终的目的是想得到运行的SQL,因为这个也决定了问题产生的地方以及运行SQL的来源.
    2.数据库日志文件用什么查看?可以查看到SQL吗?
    3.Trace受客户影响太大....
    4.inserted & deleted可以提供我想要的资料,但是SQL还是不行....大家请帮帮忙了...