读书人

触发器的施行顺序

发布时间: 2012-07-31 12:33:47 作者: rapoo

触发器的执行顺序
表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,全部会取消

读书人网 >SQL Server

热点推荐