我现在想做个日志表的功能。当用户修改一张表的时候,做一个记录到日志表中。但是不是全部更新都需要插入到日志表中。所以我在基表做了个标示,我通过判断这个标示来插入日志表。
现在的问题是,我触发器判断也已经正确,但是更新语句不能起作用。
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
字段很长我截断了一些。
现在的问题是,我触发器判断也已经正确,但是更新语句不能起作用。
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
字段很长我截断了一些。
alter table SI_CRF_INFO alter column text_column varchar(max)
然后使用after触发器,update使用instead of很难处理的。
dawugui
说的用sql server 的日志。如果能够方便用的话,那再好不过了。
我的这个日志,是因为,需要关联查询,以往修改的记录,而且,这些记录与其他表还关联。
我之前那样做事为了方便程序调用。所以才复制出一个表来存储。