我现在想做个日志表的功能。当用户修改一张表的时候,做一个记录到日志表中。但是不是全部更新都需要插入到日志表中。所以我在基表做了个标示,我通过判断这个标示来插入日志表。
现在的问题是,我触发器判断也已经正确,但是更新语句不能起作用。
google了下,说是因为 INSTEAD OF  触发器,是在语句执行前调用,执行了它就不执行我们要执行的语句了。
我用after触发器,但是我的表中存在text字段,不让我用。
我的数据库是sql server2005触发器语句是这样。
ALTER Trigger [dbo].[SICRF_INFO_LOG]
 On [dbo].[SI_CRF_INFO]
 INSTEAD OF Update
As
 
 begin
declare @flag int
declare @time datetime
declare @sicrfid int
set @time= getdate()
select @flag=ISBACKUP,@sicrfid=SI_CRF_ID from Inserted i where i.SI_CRF_ID=SI_CRF_ID
if @flag = 1
begin
insert into SI_CRF_INFO_LOG (SI_CRF_ID,ISBACKUP,MODIFICATION_REASONS,TRANS_OUT_TYPE,UPDATE_DATE)
 select d.*,@time as UPDATE_DATE 
from deleted d where d.SI_CRF_ID=SI_CRF_ID 
end
end 
字段很长我截断了一些。

解决方案 »

  1.   

    我现在想做个日志表的功能。当用户修改一张表的时候,做一个记录到日志表中。这样的需求不如直接用sql server自己的日志.
      

  2.   

    用after触发器比较好,不用更改原来逻辑
      

  3.   

    既然是SQL2005,那就用varchar(max)代替text:
    alter table SI_CRF_INFO alter column text_column varchar(max)
    然后使用after触发器,update使用instead of很难处理的。
      

  4.   

    谢谢大家的建议。
    dawugui
    说的用sql server 的日志。如果能够方便用的话,那再好不过了。
    我的这个日志,是因为,需要关联查询,以往修改的记录,而且,这些记录与其他表还关联。
    我之前那样做事为了方便程序调用。所以才复制出一个表来存储。