INSTEAD OF 触发器 问题

cheneyfeng3 2010-10-20 07:21:12
我现在想做个日志表的功能。当用户修改一张表的时候,做一个记录到日志表中。但是不是全部更新都需要插入到日志表中。所以我在基表做了个标示,我通过判断这个标示来插入日志表。
现在的问题是,我触发器判断也已经正确,但是更新语句不能起作用。
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
字段很长我截断了一些。
...全文
65 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cheneyfeng3 2010-10-22
谢谢大家的建议。
dawugui
说的用sql server 的日志。如果能够方便用的话,那再好不过了。
我的这个日志,是因为,需要关联查询,以往修改的记录,而且,这些记录与其他表还关联。
我之前那样做事为了方便程序调用。所以才复制出一个表来存储。
回复
SQLCenter 2010-10-20
既然是SQL2005,那就用varchar(max)代替text:
alter table SI_CRF_INFO alter column text_column varchar(max)

然后使用after触发器,update使用instead of很难处理的。
回复
rucypli 2010-10-20
用after触发器比较好,不用更改原来逻辑
回复
dawugui 2010-10-20
我现在想做个日志表的功能。当用户修改一张表的时候,做一个记录到日志表中。

这样的需求不如直接用sql server自己的日志.
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-20 07:21
社区公告
暂无公告