sql server 触发器实例分享(1)

发布时间:2020-10-19编辑:脚本学堂
通俗来讲,触发器可以理解为:在SQL Server中对某一个表的一定的操作,会触发某种条件,从而执行的一段程序。

触发器是一个特殊的存储过程。

常见的触发器有三种:分别应用于Insert , Update , Delete 事件。

下面介绍下为何要使用触发器?
比如,这么两个表: 
 

复制代码 代码示例:

Create Table Student(    --学生表
   StudentID int primary key,  --学号
   ....
  )

 Create Table BorrowRecord(     --学生借书记录表
   BorrowRecord   int identity(1,1),  --流水号  
   StudentID int ,     --学号
   BorrowDate     datetime,      --借出时间
   ReturnDAte     Datetime,      --归还时间
   ...
 )

用到的功能有:
1,如果更改了学生的学号,希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
2,如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。
等等。

此时可以考虑使用触发器。
对于1,创建一个Update触发器:
 

复制代码 代码示例:

Create Trigger truStudent
  On Student     --在Student表中创建触发器
  for Update      --为什么事件触发
     As          --事件触发后所要做的事情
  if Update(StudentID) 
begin

  Update BorrowRecord
  Set StudentID=i.StudentID
  From BorrowRecord br , Deleted   d ,Inserted i --Deleted和Inserted临时表
  Where br.StudentID=d.StudentID
end  
 

理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。
一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:
虚拟表Inserted      虚拟表Deleted

在表记录新增时     存放新增的记录     不存储记录
修改时      存放用来更新的新记录    存放更新前的记录
删除时      不存储记录         存放被删除的记录

一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。

对于2,创建一个Delete触发器 
 

复制代码 代码示例:
Create trigger trdStudent
  On Student
  for Delete
     As
  Delete BorrowRecord
    From BorrowRecord br , Delted d
    Where br.StudentID=d.StudentID

从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。