文档视界 最新最全的文档下载
当前位置:文档视界 › 创建触发器

创建触发器

创建触发器
创建触发器

?Column_bitmask指那些被检查是否被更新的列的位掩码。

存储过程与触发器实验

第一章存储过程与触发器实验 实验目的 1.理解存储过程的工作原理和作用。 2.掌握存储过程设置和程序设计过程。 3.理解触发器的工作原理和作用。 4.掌握触发器编写方法。 实验环境 采用IBM DB2或Sybase数据库管理系统作为实验平台。其中,DB2可以采用DB2 Express-C或DB2 V8 Enterprise。 实验完成人:李肇臻,谢锦 实验内容 一、存储过程实验 1.针对下面2个完整性约束条件,建立存储过程,实现当数据导入或更新时,可以自动修改拥塞率、半速率话务量比例 (1)拥塞率=拥塞数量/呼叫数量 (2)半速率话务量比例=半速率话务量/全速率话务量 在DB2CMD中运行,win7用管理员权限。 create procedure M() language SQL begin update CALLDATA set "callcongs"="congsnum"/"callnum" where "congsnum"<>0 and "callnum"<>0; update CALLDATA set "rate"="thtraff"/"traff" where "thtraff"<>0 and "traff"<>0; end @ 2.将存储过程添加到数据库服务器上

3.在客户端编写调用存储过程的主程序 4.运行客户端程序,调用存储过程,观察存储过程执行过程和数据更新情况;调用就用db2 CALL M() 二、触发器实验 1. 针对下列约束条件,分别建立1个触发器: 1)每个小区/扇区最多占用14个TCH频点,合法频点范围在[1,60]之间。当向小区中新加入频点时,如果小区中现有频点数目已达到14个,则用新加入的频点替换现有频点中的最小频点;当修改或新加入频点时,如果发现频点不在合法范围内,则输出提示信息,并拒绝该操作。 create trigger first_1 after insert on FREQUENCY

存储过程和触发器(数据库实验5)

数据库基础与实践实验报告实验五存储过程和触发器 班级:惠普测试142 学号:1408090213 姓名:闫伟明 日期:2016-11-14

1 实验目的: 1)掌握SQL进行存储过程创建和调用的方法; 2)掌握SQL进行触发器定义的方法,理解触发器的工作原理; 3)掌握触发器禁用和重新启用的方法。 2 实验平台: 操作系统:Windows xp。 实验环境:SQL Server 2000以上版本。 3 实验内容与步骤 利用实验一创建的sch_id数据库完成下列实验内容。 1.创建存储过程JSXX_PROC,调用该存储过程时可显示各任课教师姓名及其所教课程名称。 存储过程定义代码: CREATE PROCEDURE JSXX_PROC AS SELECT tn 教师姓名,cn 所教课程FROM T,TC,C WHERE T.tno=TC.tno AND https://www.docsj.com/doc/21951219.html,o=https://www.docsj.com/doc/21951219.html,o 存储过程执行语句与执行结果截图: EXECUTE JSXX_PROC 2.创建存储过程XM_PROC,该存储过程可根据输入参数(学生姓名)查询并显示该学生的学号、 所学课程名称和成绩;如果没有该姓名学生,则提示“无该姓名的同学”。 存储过程定义代码:

CREATE PROCEDURE XM_PROC @sname VARCHAR(100) AS BEGIN IF EXISTS(SELECT NULL FROM S WHERE sn=@sname) SELECT S.sno 学号,cn 课程,score 成绩FROM S,SC,C WHERE https://www.docsj.com/doc/21951219.html,o=https://www.docsj.com/doc/21951219.html,o AND SC.sno=S.sno AND S.sn=@sname ELSE PRINT'无该姓名的同学。' END 运行截图: 3.创建存储过程XBNL_PROC,该存储过程可根据输入参数(专业名词,默认值为计算机专业), 统计并显示该专业各年龄段男、女生人数。如果没有该专业,则显示“无此专业”。 存储过程定义代码: CREATE PROCEDURE XBNL_PROC @departName VARCHAR(30)='计算机', @begin INT, @end INT AS

数据库原理课程设计实验[创建存储过程与触发器]

存储过程与触发器实验日期和时间: 2016 年 5 月13 日、 星 期五第节 实验室:DJ2-信息管理实验室 班级:学号:姓名: 实验环境: 1.硬件:笔记本电脑 2.软件:SQL Server 2012 实验原理: 存储过程概念:存储过程是事先编好的,存储在数据库中的一组被编译了的T-SQL命令集合,这些命令用来完成对数据库的指定操作。存储过程可以接受用户的输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言(DDL)和数据操作语言(DML)语句,然后返回输入参数。 触发器概念:触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 实验任务: 此作业成绩得分根据你完成的任务的难度和数量评分,完成后在实验室给老师演示验收,课后提交电子版报告。如额外完成自拟题目应当事先将所拟题目提交给老师或在报告中明确标注题意。

假定有学校的图书馆管理信息系统,可以用于日常管理书库和同学们的借还书工作。以下列出参考的库表情况: 根据管理的业务需求来分析,该管理信息系统的数据库应至少包括如下数据表:(打★号的是必须有的表) 1.★图书现有库存表。作用:记录图书的现有库存情况。至少包括:书号、书名、 作者、简介、类别、价格、出版社、出版日期、现有库存数量、最小库存量、库 存总量、库存位置等。 2.★读者信息表。作用:记录读者信息。至少包括:读者编号、证件类型、证件号 码、姓名、性别、职业(可填写教师、学生、教工、其它……)、所属单位、地 址、联系电话等。 3.★借书记录表。作用:记录借书情况,以及是否归还。至少包括:借阅ID(主 键,可设置为自动编号)、书号、读者编号、借阅数量、借阅日期、是否归还、 管理员编号……等。 4.★还书记录表。作用:记录还书情况。至少包括:还书ID(主键,可设置为自动 编号)、书号、读者编号、归还数量、归还日期、是否超期(超过假设45天为 超期)、超期天数、管理员编号……等。(附:为简化操作,续借可视为归还后 再借)。 5.管理员信息表。作用:记录负责管理书库和借书还书工作的管理员信息。至少包 括:管理员编号、职工编号(在职工档案表中的职工编号)、用户名、密码、管 理员级别等……。 6.职工档案表表。作用:记录职工档案。至少包括: 职工编号、姓名、性别、单 位、职称、职务、出生日期、学历、……其它字段自拟。

实验六 存储过程和触发器

实验六存储过程与触发器 一、目的与要求 1.掌握编写数据库存储过程的方法。 2.掌握建立数据库触发器的方法,通过实验观察触发器的作用与触发条件设置 等相关操作。 二、实验准备 1.了解编写存储过程与调用的T-SQL语法; 2.了解触发器的作用; 3.了解编写触发器的T-SQL语法。 三、实验内容 (一)存储过程 在studentdb数据库中建立存储过程getPractice,查询指定院系(名称)(作为存储过程的输入参数)中参与“实践”课程学习的所有学生学号、姓名、所学课程编号与课程名称,若院系不存在,返回提示信息。 提示:D_Info表中存储了院系代码D_ID,而St_Info表中学号字段St_ID的前两位与之对应,则D_Info表与St_Info表之间的联系通过这两个字段的运算构成连接条件。 1.分别执行存储过程getPractice,查询“法学院”与“材料科学与工程学院” 的学生中参与“实践”课程的所有学生学号、姓名、所学课程编号与课程名称。 create procedure getPractice @D_Name varchar(30) output as begin if not exists (select * from D_Info where D_Name= @D_Name ) print '对不起,该院系不存在' else select st_info、St_ID,C_Info、C_No,C_Name from s_c_info inner join st_info on st_info、St_ID=s_c_info、st_id inner join C_Info on s_c_info、c_no=C_Info、C_No where st_info、St_ID in ( select St_ID from st_info join D_Info on D_Info、D_ID =left(st_info、St_ID,2) where C_Info、C_Type='实践' and D_Info、D_Name= @D_Name ) end go

触发器的创建和管理

实验——图书馆日常事务管理系统触发器的创建和管理 1.创建触发器 (1)使用SSMS建触发器 在TSJYMS数据库的图书类别表上创建一个名为tslb_insert_trigger的触发器,当执行INSERT操作时,该触发器被触发,禁止插入记录。 CREA TE TRIGGER tslb_insert_trigger ON图书类别 FOR INSERT AS BEGIN PRINT('禁止插入记录!') ROLLBACK TRANSACTION END (2)使用T-SQL语句创建触发器 ①在TSJYMS数据库的图书明细表上创建一个名为ts_delete_trigger的触发器,当执行DELETE操作时,该触发器被触发,禁止删除记录。 CREA TE TRIGGER ts_delete_trigger ON图书明细表 FOR DELETE AS BEGIN PRINT('禁止删除记录!') ROLLBACK TRANSACTION END ②在TSJYMS数据库的借还明细表上创建一个名为jhmx_update_trigger的触发器,当执行UPDARE操作时,该触发器被触发,不允许修改表中的图书编号。 CREA TE TRIGGER jhmx_update_trigger ON借还明细表 INSTEAD OF UPDA TE AS IF UPDA TE(图书编号) PRINT('禁止删除记录!') 2)多表级联更改触发器的创建 ①在TSJYMS数据库的读者信息表上创建一个名为dzxx_insert_trigger的触发器,当在读者信息表中插入记录时,将该记录中的借书证号自动插入借还明细表中。 CREA TE TRIGGER dzxx_insert_trigger ON读者信息 FOR INSERT AS DECLARE@NUM CHAR(20) SELECT@NUM=借书证号 FROM INSERTED INSERT借还明细表(借书证号) VALUES(@NUM) ②在TSJYMS数据库的图书明细表上创建一个名称为tsmx_update_trigger触发器,当

存储过程与触发器 实验报告

信息工程学院实验报告 课程名称:《数据库原理》 实验项目名称:存储过程与触发器 一、实验目的: (1)了解存储过程的概念 (2)掌握创建、执行存储过程的方法 (3)了解查看、修改和删除存储过程的方法 (4)了解触发器的概念 (5)掌握创建触发器的方法 (6)掌握查看、修改、删除触发器信息的方法 二、实验设备与器件 Win7 +Sql server 2008 三、实验内容与步骤 (一)存储过程 运行实验四附录中的SQL语句,准备实验数据。然后创建下列存储过程,并调试运行存储过程,查看运行结果。 1.在企业管理器中创建一个名为StuInfo的存储过程,完成的功能是在student表中查询系号为D2的学号、姓名、性别、年龄、系号的内容。 CREATE PROCEDURE StuInfo AS SELECT SNO AS学号, SNAME AS姓名, SSEX AS性别, SAGE AS年龄, DNO AS系号 FROM student WHERE DNO='D2' 结果: stuinfo 2.使用T_SQL语句创建存储过程,完成的功能是在表student,course和study中查询以下字段:学号、姓名、性别、课程名称、考试分数。

use mydb --查询是否已存在此存储过程,如果存在,就删除它 if exists(select name from sysobjects where name='StuScoreInfo'and type='P') drop procedure StuScoreInfo go --创建存储过程 CREATE PROCEDURE StuScoreInfo as select student.sno as学号, sname as姓名, ssex as性别, https://www.docsj.com/doc/21951219.html,ame as课程名称, study.grade as考试分数 from student,course,study where student.sno=study.sno and https://www.docsj.com/doc/21951219.html,o=https://www.docsj.com/doc/21951219.html,o 结果: StuScoreInfo 3.使用T_SQL语句创建一个带有参数的存储过程stu_sno_info,该存储过程根据传入的学生编号,在student表中查询此学生的信息。 if exists(select name from sysobjects where name='stu_info'and type='P') drop procedure stu_info go --创建存储过程 create procedure stu_info @sno varchar(8) as select sno as学号, sname as姓名, ssex as性别, sage as年龄, dno as年级

实验6 数据库实验——存储过程和触发器

实验6 存储过程与触发器 一、实验目的 1、加深与巩固对存储过程与触发器概念的理解。 2、掌握触发器的简单应用。 3、掌握存储过程的简单应用。 二、实验内容 一)存储过程: 1、创建一存储过程,求l+2+3+…+n,并打印结果。 CREATE PROCEDURE addresult AS DECLARE @n int=10,/*最后一个数*/ @i int=0, @result int=0 /*结果*/ BEGIN WHILE(@i<=@n) BEGIN SET @result=@result+@i SET @i=@i+1 END PRINT'1+2+3+、、、+n的结果就是:' PRINT @result RETURN(@result) END GO 2.调用上面的addresult存储过程,打印l十2+3+…+10的结果。EXEC addresult

3、修改上述存储过程为addresult1,使得@n为输入参数,其具体值由用户调用此存储过程时指定。 CREATE PROCEDURE addresult1 @n int=10 /*最后一个数*/ AS DECLARE @i int=0, @result int=0 /*结果*/ BEGIN WHILE(@i<=@n) BEGIN SET @result=@result+@i SET @i=@i+1 END PRINT'1+2+3+、、、+n的结果就是:' PRINT @result RETURN(@result) END GO 4、调用上面修改后的addresult1存储过程,打印l+2+3+…+100的结果。 EXEC addresult1 100 5.修改上述存储过程为addresult2,将@n参数设定默认值为10,并改设@sum为输出参数,让主程序能够接收计算结果。

实验五:触发器和存储过程

实验五:触发器和存储过程 一.实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。 二.实验内容: 有一个小型的图书管理数据库,包含的表为: bookstore(bookid,bookname,bookauthor,purchasedate,state);--图书库存表 borrowcard(cardid,ownername);--借书证表 borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表 写一个存储过程,实现借书操作,要求有事务处理。(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。(3)要求用触发器实现表的完整性控制。 三、操作与运行 1.创建图书数据库: create table bookstore (bookid int not null primary key, bookname char(20), bookauthor char(20),

purchasedate datetime, state char(4) ) create table borrowcard (cardid int not null primary key, ownername char(20) ) create table borrowlog (cardid int not null, bookid int not null, borrowdate datetime, returndate datetime, primary key(cardid,bookid), ---foreign key(cardid)references borrowcard(cardid), ---foreign key(bookid)references bookstore(bookid) ) 通过以上语句,可以看到数据库中的表建立成功。 2.创建存储过程: create proc book_borrow @mycardid_in int, @mybookid_in int, @str_out char(30) output

实验七 触发器解读

实验七、触发器 一、实验目的 (1)理解触发器的用途、类型和工作原理。 (2)掌握利用T-SQL语句创建和维护触发器的方法。(3)掌握利用SQL Server Management Studio创建、维护触发器的方法。 二、实验内容、 1、创建AFTER触发器 (1)创建一个在插入时触发的触发器sc_insert,当向SC表插入数据时,须确保插入的学号已在Student表中存在,并且还须确保插入课程号在Course表中存在;若不存在,则给出相应的提示信息,并取消插入操作,提示信息要求指明插入信息是学号不满足条件还是课程号不满足条件。(注:Student表与SC表的外键约束要先取消。)

(2)为Course表创建一个触发器Course_del,当删除了Course表中的一条课程信息时,同时将表SC中相应的学生选课记录也删除。 (3)在Course表中添加一个平均成绩avg_modify,当SC表中某学

生的成绩发生变化时,则Course表中的平均成绩也能及时相应发生改变。 (4)测试上述三个触发器。

2、创建INSERTED OF 触发器 (1)创建一视图student_view,包含学号、姓名、课程号、课程名、成绩等属性,在student_view上创建一个触发器grade_modify,当对student_view中的学生的成绩进行修改时,实际修改的是SC中的相应记录。

(2)在Student表中插入一个getcredit字段(记录学生所获学分的情况),创建一个触发器ins_credit,当更改(注:含插入时)SC表中的学生成绩时,如果新成绩大于等于60分,则该生可获得这门课的学分,如果新成绩小于60分,则该生未能获得这门课的学分。 (3)测试上述两个触发器。

触发器的创建与测试

触发器的创建与测试实例 实验环境:系统:windows XP 软件:oracle 9i 实验内容: 1、公司的作业小队、数据审核部门等公司内部用户还是外部用户登陆,系统均能自动记载这些用户登陆以及注销的时间。 2、数据库出错也要有记载;数据库启动和关闭时,系统应自动记载启动/ 关闭的时间、用户名等。 3、禁止数据审核部门用户在早8点之前、下午6点之后、以及周六、周日时间登陆数据库 实验过程: 一、创建触发器 1、创建表 CREATE TABLE "SYS"."TABLE_LOG_ON" ("DATABASE_NAME" V ARCHAR2(100), "EVENT_NAME" V ARCHAR2(100), "EVENT_TIME" DA TE, "TRIGGER_USER" V ARCHAR2(100)); 创建用户登录触发器: CREATE OR REPLACE TRIGGER "SYS"."TRIGER_LOGON" AFTER LOGON ON DATABASE BEGIN INSERT INTO TABLE_LOG_ON(DATABASE_NAME,EVENT_NAME,EVENT_TIME,TRI GGER_USER) V ALUES(SYS.DATABASE_NAME,SYS.SYSEVENT,SYSDATE,USER); END;

2、创建表 CREATE TABLE "SYS"."TABLE_LOG_OFF" ("DATABASE_NAME" V ARCHAR2(100), "EVENT_NAME" V ARCHAR2(100), "EVENT_TIME" DA TE, "TRIGGER_USER" V ARCHAR2(100)); 创建用户注销触发器: CREATE OR REPLACE TRIGGER "SYS"."TRIGER_LOGOFF" AFTER LOGON ON DATABASE BEGIN INSERT INTO TABLE_LOG_OFF(DATABASE_NAME,EVENT_NAME,EVENT_TIME,TR IGGER_USER) V ALUES(SYS.DATABASE_NAME,SYS.SYSEVENT,SYSDATE,USER); END; 3、创建表: CREATE TABLE "SYS"."TABLE_ERROR" ("DATABASE_NAME" V ARCHAR2(100), "ERROR_NAME" V ARCHAR2(100), "EVENT_TIME" DA TE, "TRIGGER_USER" V ARCHAR2(100)); 创建SHUTDOWN触发器: CREATE OR REPLACE TRIGGER "SYS"."TRIGGER_SHUTDOWN" BEFORE

数据库存储过程与触发器实验报告

南昌航空大学实验报告 二00 年月日 课程名称:数据库概论实验名称:数据库存储过程与触发器 班级:122031 姓名:同组人: 指导教师评定:签名: 一、实验环境 1.Windows2000或以上版本; 2.SQLServer 2005。 二、实验目的 熟悉不同数据库的存储过程和触发器,重点实践SQL Server2005,掌握SQL Server2005中有存储过程与触发器的相关知识。 三、实验要求 完成实验指导书中p115-7和p132 -4。 四、实验步骤及参考源代码 1.创建与执行存储过程 create procedure C_P_Proc as select distinct https://www.docsj.com/doc/21951219.html,o,cna,pna,num from paper,customer,cp where https://www.docsj.com/doc/21951219.html,o=https://www.docsj.com/doc/21951219.html,o and paper.pno=cp.pno and cna='李涛' or cna='钱金浩' go execute C_P_Proc 2.删除存储过程 drop procedure C_P_Proc 3.创建插入触发器 create trigger TR_PAPER_I ON PAKER12203125 FOR INSERT AS DECLARE @appr float DECLARE @apno int SELECT @appr=ppr,@apno=pno from inserted begin if @appr<0 or @appr is null begin

raiserror('报纸的单价为空或小于!',16,1) update paper set ppr=10 where paper.pno=@apno end end 4.创建删除触发器 create Trigger TR_PAPER_D on PAKER12203125 after delete as declare @ipno char(6) declare @icount int; select @icount= count(*) from deleted,cp where deleted.pno=cp.pno if @icount>=1 begin select @ipno=pno from deleted raiserror('级联删除cp表中的数据',16,1) delete from cp where cp.pno=@ipno end 5.创建修改触发器 create trigger TR_PAPER_U ON PAKER12203125 for update as declare @ippr float select @ippr=ppr from inserted if @ippr<0 or @ippr is null begin raiserror('输入单价不正确',16,1) rollback transaction end 6. 分别对PAKER12203125表进行插入、修改、删除操作 insert into PAKER12203125 (pno,pna,ppr)values('000006','江西日报','1') insert into PAKER12203125 (pno,pna,ppr)values('000007','江南都市报','15.5') delete from PAKER12203125 where pno='000001' update PAKER12203125 set ppr=12.5 where pno='000002' update PAKER12203125 set ppr=-2 where pno='000004' 五、实验结果

第6章_存储过程与触发器练习题

有教师表(教师号,教师名,职称,基本工资),其中基本工资的取值与教师职称有关。实现这个约束的可行方案是( )。 A 在教师表上定义一个视图 B 在教师表上定义一个存储过程 C 在教师表上定义插入和修改操作的触发器 D 在教师表上定义一个标量函数 参考答案 C 在SQL SERVER中,执行带参数的过程,正确的方法为()。 A 过程名参数 B 过程名(参数) C 过程名=参数 D ABC均可 参考答案 A 在SQL SERVER服务器上,存储过程是一组预先定义并()的Transact-SQL语句。 A 保存 B 解释 C 编译 D 编写 参考答案 C 在SQL Server中,触发器不具有()类型。 A INSERT触发器 B UPDATE触发器 C DELETE触发器 D SELECT触发器 参考答案 D

()允许用户定义一组操作,这些操作通过对指定的表进行删除、插入和更新命令来执行或触发。 A 存储过程 B 规则 C 触发器 D 索引 参考答案 C 为了使用输出参数,需要在CREATE PROCEDURE语句中指定关键字( )。 A OPTION B OUTPUT C CHECK D DEFAULT 参考答案 B 下列( )语句用于创建触发器。 A CREATE PROCEDURE B CREATE TRIGGER C ALTER TRIGGER D DROP TRIGGER 参考答案 B 下列( )语句用于删除触发器。 A CREATE PROCEDURE B CREATE TRIGGER C ALTER TRIGGER D DROP TRIGGER 参考答案 D

实验八 存储过程和触发器_参考答案

实验八存储过程和触发器 一、目的与要求 1. 正确理解存储过程和触发器的概念、功能和类型; 2. 掌握使用SSMS和T-SQL语句创建和管理存储过程和触发器。 二、上机准备 利用教师提供的XSGL数据库,该库中有3个表:student,course,sc。 三、实验内容 1. 将教师提供的XSGL数据库附加到本地数据库中。 2. 分别使用SSMS和T-SQL语句创建和管理存储过程和触发器。 (1)创建一个存储过程proc_stud_sc_info,查询学号、姓名、性别、系、课程号和成绩等信息。 use xsgl go create procedure proc_stud_sc_info as select student.sno,sname,sex,dept,cno,grade from student left join sc on student.sno=sc.sno go (2)创建一个存储过程proc_stud_info,根据输入的学号,查询学生的基本信息。 use xsgl go create procedure proc_stud_info @sno char(5)='95001' as select * from student where sno=@sno go (3)创建一个存储过程proc_stud_birth_year,根据输入的学生姓名,计算该学生的出生年份。 use xsgl go create procedure proc_stud_birth_year @sname varchar(6)='张立' as select sname,year(getdate())-age as 出生年份 from student where sname=@sname go

实训十 触发器的创建和使用

实训十触发器的创建和使用 一、实训目的 1. 理解触发器的作用; 2. 了解触发器和一般存储过程的区别; 3. 掌握创建、修改及删除触发器的方法; 4. 理解触发器执行的过程。 二、实训步骤 (一) 简单触发器的创建和使用 1.在student数据库中t_course表创建一名为myt1的AFTER触发器,要求实现以 下功能:当插入一条记录后提示“已插入一条新记录”,并验证此触发器。 2.在student数据库中t_course表创建一名为myt2的AFTER触发器,要求实现以 下功能:当删除一条记录后提示“已删除一条记录”,并验证此触发器。 3.在student数据库中t_course表创建一名为myt3的AFTER触发器,要求实现以 下功能:当修改一条记录后提示“已修改一条记录”,并验证此触发器。 4.在student数据库中t_course表创建一名为myt4的INSTEAD OF触发器,要求 实现以下功能:当删除一条记录之前提示“不能删除此表的记录!”,并验证此触发器,检查是否能删除此表的记录。 5.删除以上创建的所有触发器。 (二) 较复杂的触发器的创建和使用 1. 创建一个AFTER触发器,要求实现以下功能:在t_score表上创建一个插入更新 类型的触发器scoreCheck,当在score字段中插入或修改考试分数后,触发该触发器,检查分数是否在0至100分之间。(参考教材P186的例10-3,运行后发现尽管分数不在0至100分之间,但还是能够插入和修改) 2. 创建一个AFTER触发器,要求实现以下功能:在t_score表上创建一个插入更新 类型的触发器scoreCheck2,当在score字段中插入或修改考试分数后,触发该触发器,检查分数是否在0至100分之间,若不在,则不能插入或修改,并给出提示。代码段如下: CREATE TRIGGER scoreCheck2 ON t_score FOR insert, update AS declare @ScoreValue as int select @ScoreValue =(select score from inserted) if @ScoreValue <0 or @ScoreValue >100 begin rollback transaction print '数据不正确不能修改' end

创建存储过程与触发器

实验7 创建存储过程与触发器 实验日期和时间:2011-11-11 实验室:2#206 班级:09计本(4)学号:2009810182 姓名:周伟 实验环境: 1.硬件:1G内存 1.73GHz 2.软件:SQL server2008 实验原理: 创建存储过程,执行存储 通过建立触发器实现对数据库的更新。 实验任务: 此作业成绩得分根据你完成的任务的难度和数量评分,完成后在实验室给老师演示验收,课后提交电子版报告。如额外完成自拟题目应当事先将所拟题目提交给老师或在报告中明确标注题意。 假定有某个企业(或公司,或代理商)经销某类产品,需要用一个信息系统对销售业务和库存进行管理。 首先,他们得在数据库中存储所有经营过的产品的信息,并建立现有库存的信息表; 其次,对于每次销售或者进货,他们都得记录下来以便进行管理,将来对这些信息进行统计或财务管理;再次,在每笔销售记录中需要记录相关客户信息,在进货时需要记录相关供应商的信息,也为了与不同的供应商和客户进行联系,需要分别建立二者的信息表。综上所述,在以上建立的数据库中我们至少需要以下几个基本表: 1.产品表(记录公司曾经经营的所有产品信息) 2.现有库存表(记录公司目前经营的产品的现有库存信息) 3.出库单表(记录产品销售出库时的情况:时间、销售员、客户、商品编码、 商品数量等) 4.入库单表(记录公司每次产品进货入库时的信息) 5.供应商表(记录为公司供货的主要供应商信息) 6.客户表(记录公司的所有客户信息) 以下是供参考的表结构的部分信息,同学们可以根据题意自行修改表的结构 1.产品表(记录公司的产品信息) 字段名数据类型长度备注 产品编号文本主键 产品名称文本非空 类别文本 供应商编号文本外键(来自供应商表) 产地文本 最新参考单价货币

SQL触发器语法参考

SQL触发器语法参考 CreateTRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { { { FOR |AFTER | INSTEAD OF } { [ Insert ] [ , ] [ Update ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS [ { IF Update ( column ) [ { AND | or } Update ( column ) ] [ ...n ] | IF ( COLUMNS_UpdateD ( ) { bitwise_operator } updated_bitmask) { comparison_operator } column_bitmask [ ...n ] } ] sql_statement [ ...n ] } } 参数 trigger_name 是触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须唯一。可以选择是否指定触发器所有者名称。 Table | view 是在其上执行触发器的表或视图,有时称为触发器表或触发器视图。可以选择是否指定表或视图的所有者名称。 WITH ENCRYPTION 加密syscomments 表中包含Create TRIGGER语句文本的条目。使用WITH ENCRYP TION 可防止将触发器作为SQL Server复制的一部分发布。 AFTER 指定触发器只有在触发SQL语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。 如果仅指定FOR 关键字,则AFTER是默认设置。 不能在视图上定义AFTER 触发器。

实验四 触发器的建立与使用

实验四触发器的建立与使用、授权和权限回收 1、针对student表写一个INSERT触发器,在插入记录时检查性别属性必须为“男”或“女”,否则报错。执行INSERT操作,观察触发器的运行情况。 这道题的重点在于理解运用触发器的时候两个重要的表一个是inserted表,另一个就是Deleted表,本题中我们先从inserted表中提取出要插入的性别,然后判断如果是男或女就将本条记录插入到表中,否则阻止插入。 当用insert into student(sno,sname,ssex,sage,sdept) values('3837','阿加','d','19','计算机系')测试时出现 2、针对student表写一个INSTEAD of类型的UPDATE触发器,在记录被修改时拒绝操作。执行UPDATE操作,观察触发器的运行情况。 本题要求触发器类型为INSTEAD of,而INSTEAD of类型的触发器是在更新之前就被激发的所以直接当要在表student上执行更新时直接不能操作 测试数据:update student set sage='2' where sno='0603001' 结果: 3、针对sc表写一个DELETE触发器,要求一次最多只能删除5条记录。执行DELETE 操作,观察触发器的运行情况。 这里利用deleted表,因为删除的记录会暂时放到这里,统计这个表里的记录一共有多少条,如果大于5.就不允许删除。

测试语句:delete from sc where cno='2' 结果: 4、重命名第1题中的触发器。 本题比较简单,就是一个重命名的语句: exec sp_rename insert_g,insert_g1 5、禁用第2题中定义的触发器。 alter table student disable trigger insert_gw 6、删除第3题中定义的触发器。 drop trigger insert_gwh 7、新建角色newrole,授予其对teaching数据库中三张表的查询和insert、delete权限。 create role newrole grant insert,delete,select on student to newrole grant insert,delete,select on sc to newrole grant insert,delete,select on course to newrole 8、新建用户newuser,对其授予newrole角色。 新建用户之前要先定义一个登录名,这里我们设置用户名和登录名相同,然后运行create user newuser,然后将角色授予用户grant grant wang to newuser to newuser 9、对用户newuser授予对student表中sdept列的update权限。 grant update(sdept) on student to newuser 选作题: 1、设置一个触发器,该触发器仅允许“dbo”用户可以删除student表内数据的,否则出错。 2、设计一个触发器,若修改student表中的学生学号,则自动修改sc表中与该学生对应的相关记录的学号。 在student表上建立一个触发器,当修改student表上的学号时,定义两个变量,一个等于老的学号,一个等于新的学号,然后根据这两个变量修改sc表中的学号

实验五 存储过程和触发器(计科)

实验五:触发器和存储过程 一、实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。 二、预习要求:存储过程和触发器的相关概念,事务的相关概念,编写相应的SQL语句。 三、实验内容: 有一个小型的图书管理数据库,包含的表为: bookstore(bookid,bookname,bookauthor,purchasedate,state); --图书库存表 borrowcard(cardid,ownername);--借书证表 borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表 写一个存储过程,实现借书操作,要求有事务处理。(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。(3)要求用触发器实现表的完整性控制。 四、完成情况(附上设计的SQL语句)。 ------触发器和存储过程 ------触发器和存储过程 CREATE DATABASE BOOK1 go use BOOK1 CREATE TABLE BOOKSTORE(Bookid nvarchar(10),Bookname nvarchar(10),Bookauthor nvarchar(10),purchasedate datetime,state Nvarchar(10),primary key(Bookid)) Create table Borrowcard(Cardid int,ownername nvarchar(10),primary key(Cardid)) Create table Borrowlog(Cardid int,Bookid nvarchar(10),borrowdate datetime,returndate datetime ,primary key(Cardid,Bookid))

sqlserver SQL触发器的使用及语法

定义:何为触发器?在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分别表示触发事件的表“旧的一条记录”和“新的一条记录”。

相关文档
相关文档 最新文档