sqlserverSQL触发器的使用及语法.docx
文本预览下载声明
定义:何为触发器?在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 truStudentOn Student?????????????????????????--在Student表中创建触发器for Update??????????????????????????--为什么事件触发As????????????????????????????????????????--事件触发后所要做的事情if Update(StudentID)???????????beginUpdate BorrowRecord?Set StudentID=i.StudentIDFrom BorrowRecord br , Deleted???d ,Inserted i??????--Deleted和Inserted临时表Where br.StudentID=d.StudentIDend???????理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:虚拟表Inserted?????????????????????虚拟表Deleted在表记录新增时?????存放新增的记录?????????????????????????不存储记录修改时???????????存放用来更新的新记录???????????????????存放更新前的记录删除时???????????不存储记录?????????????????????????????存放被删除的记录一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。对于2,创建一个Delete触发器Create trigger trdStudentOn Studentfor DeleteAsDelete BorrowRecordFrom BorrowRecord br , Delted dWhere br.StudentID=d.StudentID从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。SQL触发器实例2USE MasterGOIF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’U’ AND NAME = ’卷烟库存表’)DROP TABLE 卷烟库存表GOIF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’U’ AND NAME = ’卷烟销售表’)DROP TABLE 卷烟销售表GO--业务规则:销售金额 = 销售数量 * 销售单价业务规则。CREATE TABLE 卷烟销售表(卷烟品牌 VARCHAR(40) PRIMARY KEY NOT NULL,购货商 VARCHAR(40) NULL,销售数量 INT NULL,销售单价 MONEY NULL,销售金额 MONEY NULL)GO--业务规则:库存金额 = 库存数量 * 库存单价业务规则。CREATE TABLE 卷烟库存表(卷烟品牌 VARCHAR(40) PRIMARY KEY NOT NULL,库存数量 INT NULL,库存单价 MONEY NULL,库存金额 MONE
显示全部