SQLSERVER触发器_蔚蓝海边放飞快乐_百度空间

1、触发器。

   定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触

发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
   常见的触发器有三种:分别应用于Insert , Update , Delete 事件。(SQL

Server 2000定义了新的触发器,这里不提)

   我为什么要使用触发器?
     比如,这么两个表:
   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
     for Update    --触发器类型--Update
   -------------------------------------------------------
   --Name:truStudent
   --func:更新BorrowRecord 的StudentID,与Student同步。
   --Use :None
   --User:System
   --Author: wp_love
   --Date : 2003-4-16
   --Memo : 临时写写的,给大家作个Sample。没有调试阿。
   -------------------------------------------------------
   As
     if Update(StudentID)
     begin

     Update BorrowRecord
       Set br.StudentID=i.StudentID
       From BorrowRecord br , Deleted d ,Inserted i
       Where br.StudentID=d.StudentID

     end    
         
   理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与

Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。
   一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录

到Deleted表,然后删除Student记录并写入新纪录。

   对于2,创建一个Delete触发器
   Create trigger trdStudent
       On Student
       for Delete
   -------------------------------------------------------
   --Name:trdStudent
   --func:同时删除 BorrowRecord 的数据
   --Use :None
   --User:System
   --Author:
   --Date : 2003-4-16
   --Memo : 临时写写的,给大家作个Sample。没有调试阿。
   -------------------------------------------------------
   As
     Delete BorrowRecord
     From BorrowRecord br , Delted d
     Where br.StudentID=d.StudentID

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

触发器其实可以看做是一种特别的存储过程,当你进行insert、update、delete

操作时就会触发!
insert触发器,首先会先把insert的数据写到inserted表里面,inserted表可以

看做是一个内存中的临时表!
delete触发器,首先把delete的数据写到deleted表中,同上!
update触发器,update的操作就是先delete再insert,所以会把delete的数据写

到deleted表,insert数据写到insert表

1、代码:写触发器之前一般要判断该触发器是否存在,如果存在则要删除该触发

器,这样可以保证脚本多次运行的时候没有问题。
同样适用于存储过程,但是不能勇于数据表,特别是当数据表有数据的时候。(

我们曾经遇到过,一个成员修改数据库的时候,
重新生成了脚本,结果就把数据全部删掉了)
一般用  
     IF EXISTS (SELECT name FROM sys.objects WHERE name = '触发器的名字

' AND type = 'TR')
        DROP TRIGGER ’触发器名字‘;
    GO
2.创建:下边可以开始创建触发器
    Create Trigger 触发器名字 On 表
    FOR/INSTEAD OF/AFTER             ---这里有三个选项:
                                                    -- for是针对什么

的触发,也就是当执行某些操作的时候触发(insert,update,delete)
                                                    -- after是再操作

之后触发,也就是当某些操作执行完的时候触发(insert,update,delete)
                                                    -- instead of 是

替换这些操作(insert,update,delete)
   Insert(, Update,delete)可以是一个或者多个的组合
    AS

       SQL语句
    GO
3. 处理
    如果是单独针对某个操作的触发器,则不用判断,否则就是要判断操作。
    在触发器里边,会有两个临时表供使用inserted 和deleted

    如果是insert 操作,则只会在inserted表里边有数据
    如果是delete操作,则只会在deleted表里有数据
    如果是update操作呢?这里要注意下,update操作的实质,也就是在SQL

DBMS的内部,其实还是执行了
    两个操作,delete 和insert。所以,如果是update 这两个临时表都会有数

据,一个是旧的,一个是新的。

SQL游标的简单使用

CREATE PROCEDURE [dbo].[pro_CURSOR]
AS
BEGIN

--声明一个游标
DECLARE MyCURSOR CURSOR FOR
SELECT userid,depid FROM users

--打开游标
open MyCURSOR

--声明两个变量
declare @userid varchar(50)
declare @depid varchar(50)

--循环移动
fetch next from MyCURSOR into @userid,@depid
while(@@fetch_status=0)
begin
    update users set description=(select dep_des from department where

)
where
    fetch next from MyCURSOR into @userid,@depid
end

close MyCURSOR
deallocate MyCURSOR

END



郑重声明:资讯 【SQLSERVER触发器_蔚蓝海边放飞快乐_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——