after触发器 是在 INSERT、UPDATE 或 DELETE 语句操作之后再执行的操作 instead of触发器 当对表INSERT、UPDATE 或 DELETE 操作时, 把操作交给触发器,让触发器去完成。 如下例子: ------- -- 创建测试主表. CREATE TABLE test_main ( id INT, value VARCHAR(10), PRIMARY KEY(id) ); -- 创建测试子表. CREATE TABLE test_sub ( id INT, main_id INT, value VARCHAR(10), PRIMARY KEY(id) ); -- 创建外键. ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main; -- 创建 FOR 触发器. CREATE TRIGGER InsertTest ON test_sub FOR INSERT AS BEGIN PRINT('INSERT test_sub!'); END; Go INSERT INTO test_sub VALUES( 100,100,'100'); 消息 547,级别 16,状态 0,第 1 行 INSERT 语句与 FOREIGN KEY 约束"main_id_cons"冲突。该冲突发生于数据库"TestDev",表"dbo.test_main", column 'id'。 语句已终止。 从上面的结果可以看到,由于外键冲突,插入失败,导致触发器也没有被执行。 -- 修改为 AFTER 触发器. ALTER TRIGGER InsertTest ON test_sub AFTER INSERT ...... INSERT INTO test_sub VALUES( 100,100,'100'); 消息 547,级别 16,状态 0,第 1 行 INSERT 语句与 FOREIGN KEY 约束"main_id_cons"冲突。该冲突发生于数据库"TestDev",表"dbo.test_main", column 'id'。 语句已终止。 AFTER 运行结果与 FOR 一样。 -- 修改为 INSTEAD OF 触发器. ALTER TRIGGER InsertTest ON test_sub INSTEAD OF INSERT ...... INSERT INTO test_sub VALUES( 100,100,'100'); INSERT test_sub! (1 行受影响) (责任编辑:admin) |