INSTEAD OF 触发器 问题
我现在想做个日志表的功能。当用户修改一张表的时候,做一个记录到日志表中。但是不是全部更新都需要插入到日志表中。所以我在基表做了个标示,我通过判断这个标示来插入日志表。
现在的问题是,我触发器判断也已经正确,但是更新语句不能起作用。
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
字段很长我截断了一些。
...全文
相关推荐
第触发器PPT学习教案.pptx
第触发器PPT学习教案.pptx
数据库触发器是一种存储过程
触发器是一种特殊的存储过程,类似于其它编程语言中的事件函数,SQL Server™ 允许为 INSERT、UPDATE、DELETE 创建触发器,当在表(视图)中插入、更新、删除记录时,触发一个或一系列 T-SQL 语句。 触发器分为两种一个是INSTEAD OF 触发器;一个是AFTER 触发器。
数据库实验报告(基本操作实验)
1 实验一 创建表、更新表和实施数据完整性 2 实验二 查询数据库 3 实验三 视图与触发器 4 实验四 存储过程 5 实验五 事务与游标
SQLServer开发人员应聘经常问到的问题
SQL Server开发人员应聘常被问的问题妙解汇总
深入浅析SQL Server 触发器
触发器是一种特殊的存储过程,触发器是通过事件触发可以自动调用执行的。在sql2005中,触发器可以分为dml触发器和ddl触发器。下面通过本篇文章给大家深入浅析sqlserver触发器,需要的朋友可以参考下


疑难问题
