我想要跟踪某个表数据是从哪个地方修改的,用系统函数host_name()只跟踪到是由哪部主机修改的,app_name()只能跟踪
应用程式名,无法跟踪到储过程名或函数名。
请教有没有办法可以解决?

解决方案 »

  1.   

    你能跟宗到语句吗》?
    若能则请查询 select b.name,b.type from sys.syscomments a join sys.sysobjects b on a.id=b.id 
    where text like '%update tb ...%'  --update tb ...%是更新的语句--可以查询到修改此表的对象信息
      

  2.   

    duanzhi1984:我无法跟踪到语句,请继续帮忙。谢了!
      

  3.   

    有更新数据肯定有update语句,你在update语句写上日志。
    这个得你自己写日志记录了
      

  4.   

    谢hdhai9451,我有写触发器跟踪,有跟踪到修改的主机host_name()和修改帐号user_name()(LoginName\Administrator),但无法跟踪到是哪个存储过程或函数修改的。估计是在sqlserver中设定了JOB调用存储过程修改的,但JOB和存储过程太多,无法一个个打开查找。
      

  5.   

    up!SQL Server 性能跟踪工具 SQL Server Profiler
    可以用数据库自带的跟踪功能啊!
      

  6.   

    因某些原因不太适合用SQL Server Profiler。
      

  7.   

    试试
    SELECT * FROM sys.syscomments WHERE id IN (SELECT id FROM sysobjects WHERE xtype = 'p') AND CAST(text AS VARCHAR(max)) LIKE '%tablename%' OR (CHARINDEX('update',CAST(text AS VARCHAR(max)),1)>0 AND CHARINDEX('tablename',CAST(text AS VARCHAR(max)),1)>0 )  其他情况等
    来进行查询。