sql 触发器

解释

  • 如果一个Insert﹑update或者delete语句违反了约束,那么这条SQL语句就没有执行成功,因此“After”触发器也不会被激活。

  • “Instead of” 触发器可以取代激发它的操作来执行。它在Inserted表和Deleted表刚刚建立,其它任何操作还没有发生时被执行。因为“Instead of” 触发器在约束之前执行,所以它可以对约束进行一些预处理。

  • 对表的操作Inserted逻辑表Deleted逻辑表
    增加记录(insert) 存放增加的记录
    删除记录(delete) 存放被删除的记录
    修改记录(update) 存放更新后的记录 存放更新前的记录

  

--格式
create trigger trigger_Ceshi
on {table_name|view_name} 
{After|Instead of} {insert|update|delete}
as 相应T-SQL语句

insert into ceshi values(22)

--例子
create trigger trigger_Ceshi
on ceshi
after insert
as
begin
--定义变量
declare @id int, @Amount decimal(18,2);
--在inserted表中查询已经插入记录信息
select @id = id, @Amount = Amount from inserted;

insert into ceshi2 values(@id,@Amount);
end

-------------------------------

触发器怎么获取更新前的值呢

--更新的动作你可以分2步理解,先delete ,再insert
--所以,前的值在 deleted里
--  后的值在 inserted里

 

create trigger t_ATDATEState_update
on ceshi
for update
as
if update(ATDATEState)
begin
 declare @Insteadof nvarchar(200)  --修改之前的
 declare @After nVARCHAR(200)  --修改之后的
 declare @S_id INT
 
 SELECT @After= id FROM INSERTED --从更新后的副本表(临时表)里面 获得要修改后的状态
 
 select  @Insteadof=id from deleted  --从之前删掉的临时表里面获取原来的值
 -- 插入记录,记录修改过程
 insert into ceshi2 values(@Insteadof,@After,getdate())
 
end
原文地址:https://www.cnblogs.com/yangjinwang/p/5103040.html