• SQL触发器实例1


    定义: 何为触发器?

    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      --DeletedInserted临时表

               Where br.StudentID=d.StudentID

           end       

                    

        理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted Inserted分别表示触发事件的表旧的一条记录新的一条记录

        一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:虚拟表InsertedDeleted

        一个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.触发机制。

  • 相关阅读:
    如何控制Yahoo! Slurp蜘蛛的抓取频度_国外博客资源站_百度空间
    PHP学习之十:foreach
    asp.net 上传控件
    程序员转型不得不说的事 成为管理者
    博客无法使用外站图片,暂停更新一段时间
    C#控制光驱开关
    通过输入方式在Android上进行微博OAuth登录
    .Net 绑定Dropdownlist的时自定义组合字段后显示
    XNA那些事(四) 3D知识初步
    jQuery实现图片延迟加载
  • 原文地址:https://www.cnblogs.com/jazzka702/p/1528214.html
Copyright © 2020-2023  润新知