解释
-
如果一个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