首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

触发器的施行顺序

2012-07-31 
触发器的执行顺序表1有多个update触发器tg1,tg2,tg3因为考虑将来维护性,不想把3个合在一起。所以我我知道他

触发器的执行顺序
表1有多个update触发器 tg1,tg2,tg3 
因为考虑将来维护性,不想把3个合在一起。
所以我我知道他们的执行顺序怎么定的?

[解决办法]
sp_settriggerorder 可指定第一个和最后一个执行的触发器,其他未指定的会随机触发。
[解决办法]

SQL code
USE TEMPDBGOIF OBJECT_ID('TB') IS NOT NULL DROP TABLE TBIF OBJECT_ID('TB2') IS NOT NULL DROP TABLE TB2GOCREATE TABLE TB(COL1 INT)CREATE TABLE TB2(ID INT IDENTITY(1,1),COL1 INT)GOCREATE TRIGGER TIG_TB_1 ON TBFOR INSERTASBEGININSERT INTO TB2SELECT COL1+1 FROM INSERTEDENDGOCREATE TRIGGER TIG_TB_2 ON TBFOR INSERTASBEGININSERT INTO TB2SELECT COL1+2 FROM INSERTEDENDGOCREATE TRIGGER TIG_TB_3 ON TBFOR INSERTASBEGININSERT INTO TB2SELECT COL1+3 FROM INSERTEDENDGOINSERT INTO TBSELECT 1GOSELECT * FROM TB2/*1    22    33    4*/
[解决办法]
SQL code
USE TEMPDBGOIF OBJECT_ID('TB') IS NOT NULL DROP TABLE TBIF OBJECT_ID('TB2') IS NOT NULL DROP TABLE TB2GOCREATE TABLE TB(COL1 INT)CREATE TABLE TB2(ID INT IDENTITY(1,1),COL1 INT)GOCREATE TRIGGER TIG_TB_1 ON TBFOR INSERTASBEGININSERT INTO TB2SELECT COL1+1 FROM INSERTEDENDGOCREATE TRIGGER TIG_TB_3 ON TBFOR INSERTASBEGININSERT INTO TB2SELECT COL1+3 FROM INSERTEDENDGOCREATE TRIGGER TIG_TB_2 ON TBFOR INSERTASBEGININSERT INTO TB2SELECT COL1+2 FROM INSERTEDENDGOINSERT INTO TBSELECT 1GOSELECT * FROM TB2/*1    22    43    3*/
[解决办法]
如果不存在相互的引用关系,即tg2要引用tg1的结果的情形,执行先后没有关系,多个触发器是在一个事务里面,如果有一个rollback,全部会取消

热点排行