time 
设为首页】【收藏本站
当前位置: 主页 > 数据库 > SQL Server > SQL 基础 > SQL Server触发器介绍及使用

SQL Server触发器介绍及使用

时间:2014-06-13 15:50 点击:1991次 字体:[ ]




触发器

概述

   触发器为特殊类型的存储过程,可在执行语言事件时自动生效。SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。

当服务器或数据库中发生数据定义语言 (DDL) 事件时将调用 DDL 触发器。登录触发器将为响应 LOGON 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。

当数据库中发生数据操作语言 (DML) 事件时将调用 DML 触发器。DML 事件包括在指定表或视图中修改数据的 INSERT 语句、UPDATE 语句或 DELETE 语句。DML 触发器可以查询其他表,还可以包含复杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到错误(例如,磁盘空间不足),则整个事务即自动回滚。

 

步骤

   本文主要讲述DML触发器,DML触发器有两种:AFTER,INSTEAD OF触发器,同时DML 触发器使用 deleted 和 inserted 逻辑(概念)表。 它们在结构上类似于定义了触发器的表,即对其尝试执行了用户操作的表。 在 deleted 和 inserted 表保存了可能会被用户更改的行的旧值或新值。

  • 对于INSERT 操作,inserted保留新增的记录,deleted无记录
  • 对于DELETE 操作,inserted无记录,deleted保留被删除的记录
  • 对于UPDATE操作,inserted保留修改后的记录,deleted保留修改前的记录

    一.语法

  1. CREATE TRIGGER [ schema_name . ]trigger_name   
  2. ON { table | view }   
  3.  [ WITH <dml_trigger_option> [ ,...n ] ]   
  4. FOR | AFTER | INSTEAD OF }   
  5. { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }   
  6.   AS { sql_statement  [ ; ] [ ,...n ] [ ; ] > } 

    二.创建表

  1. CREATE TABLE Class  
  2. (Cno INT PRIMARY KEY,  
  3. Cname nvarchar(20) not null)  
  4. go  
  5. CREATE TABLE Student  
  6. (SNO INT PRIMARY KEY IDENTITY(1,1),  
  7. Sname CHAR(10) not null,  
  8. Age int not null,  
  9. Sex char(2) not null,  
  10. Cno int NOT NULL 
  11. )  
  12. ALTER TABLE Student ADD CONSTRAINT FK_SNO_Cno FOREIGN KEY (Cno) REFERENCES Class(Cno)  
  13. go 

AFTER触发器

AFTER 指定 DML 触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被触发。 所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。

如果仅指定 FOR 关键字,则 AFTER 为默认值。

不能对视图定义 AFTER 触发器

  • insert触发

当向Class表中插入一条数据时,获取插入的cno,同时向Student表中插入一条数据

  1. IF OBJECT_ID('TR_Class_insert','TR'IS NOT NULL 
  2. DROP TRIGGER TR_Class_insert  
  3. G0  
  4. CREATE TRIGGER TR_Class_insert on Class  
  5. AFTER INSERT 
  6. AS 
  7. BEGIN 
  8.   DECLARE @Cno INT 
  9.   SELECT @Cno=Cno FROM inserted----获取插入的数据CNO  
  10.   INSERT INTO Student(Sname,Age,Sex,Cno)  
  11.   VALUES('李明',20,'男',@Cno)  
  12. END   
  13.  
  14. go  
  15. INSERT INTO Class  
  16. SELECT 101,'一班' 
  17.  
  18. SELECT * FROM Class  
  19. SELECT * FROM Student 

 



本文地址 : http://www.fengfly.com/plus/view-215074-1.html
标签: SQL Server 触发器
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: