能做到,但是恢复sql 语句比较麻烦,也没有必要,一般应该是保存改前记录和改后记录。create trigger tr_test_update
on test
for update
as
insert testlogs
select *,SUSER_SNAME(),getdate(),'deleted' as type
from deleted
union all
select *,SUSER_SNAME(),getdate(),'inserted' as type
from inserted
go

解决方案 »

  1.   

    谢谢几位的解答,因我主要是看表里的某一栏位的是怎么变化的,因为我知道他变化前和变化后的状态,所以sql 语句和用户时我最想知道的信息!
    sasacat(傻傻猫) :存储过程应该怎样写?
      

  2.   

    看帮助,关于触发器的IF (COLUMNS_UPDATED()) ,还有,系统表syscolumns,应该可以写出来,但比较复杂,也应该不是很准确。比如:
    update test
    set a=a
    where id=1
    这样的语句,数据没有变化,就测不出来。
      

  3.   

    写成procedure 是不是简单一些!因为我对sqlserver的一些系统表不是很了解!头大
      

  4.   

    是这样,我的sqlserver数据库中有一个table的一个栏位在插入值时肯定是1
    在业务流程上他不会被update成别的值,但是我们在使用这个的table时,发现有些纪录的这个栏位被update成别的值,所以我想把写触发器来查找他为什么会被改掉!大家帮我想个别的方法也可以!
      

  5.   

    对,如果
    update 表 set 列 = 列 where 列 = 列
    那通过分析deleted和inserted是什么也分析不出来的。
      

  6.   

    刚才试了一下,不行,不写了!
    因为好多测不出来,比如set a=a+1,where 部分也是测不出来。
    我觉得还是记录改前和改后的整条记录比较现实。
      

  7.   

    sqlserver 的sql profiler 可以达到我的目的,没用过他,你们有没有用过!