sqlserver教程网

当前位置: 主页 > sql语言 >

sql中触发器instead of 和after

时间:2016-10-18 15:32来源:www.sqlserver.net.cn 作者:admin 点击:
after触发器是在INSERT、UPDATE或DELETE语句操作之后再执行的操作 instead of触发器 当对表INSERT、UPDATE或DELETE操作时, 把操作交给触发器,让触发器去完成。 如下例子: ------- -- 创建测试主表
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)
顶一下
(2)
50%
踩一下
(2)
50%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
栏目列表
推荐内容
  • SQL TOP 的用法

    SQL Server 的语法: SELECT TOP number|percent column_name(s)FROM table_name 等...

  • SQL测试题1

    一、问答题 1、数据库包含哪些哪几种后缀名的文件必须,这些...