数据库实验6触发器实验报告.docx
- 文档编号:23142974
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:13
- 大小:235.31KB
数据库实验6触发器实验报告.docx
《数据库实验6触发器实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验6触发器实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
数据库实验6触发器实验报告
淮海工学院计算机工程学院
实验报告书
课程名:
《数据库原理及应用》
题目:
存储过程和触发器
班级:
软件132
学号:
2013122907
姓名:
孙莹莹
评语:
成绩:
指导教师:
批阅时间:
年月日
一.目的与要求
1.掌握存储过程的创建方法;
2.掌握存储过程的执行、修改和删除等操作;
3.掌握触发器的创建方法;
4.掌握触发器的使用、修改和删除等相关内容
二.实验内容
基于前面建立的factory数据库,使用T-SQL语句完成如下各小题的功能:
1.创建一个为worker表添加职工记录的存储过程Addworker;
2.创建一个存储过程Delworker删除worker表中指定职工号的记录。
3.显示存储过程Delworker;
4.删除存储过程Addworker和Delworker.
三.实验步骤
1.
(1)建立存储过程
USEfactory
GO
CREATEPROCEDUREAddworker
@noint=NULL,
@namechar(10)=NULL,
@sexchar
(2)=NULL,
@birthdaydatetime=NULL,
@nachar
(2)=NULL,
@wtimedatetime=NULL,
@depnoint=NULL
AS
IF@noISNULLOR@nameISNULLOR@sexISNULLOR
@birthdayISNULLOR@depnoISNULL
BEGIN
PRINT'请重新输入该职工信息!
'
PRINT'你必须提供职工号、姓名、性别、出生日期、部门号'
RETURN
END
BEGINTRANSACTION
INSERTINTOworker
VALUES(@no,@name,@sex,@birthday,@na,@wtime,@depno)
IF@@error<>0
BEGIN
ROLLBACKTRAN
RETURN
END
COMMITTRANSACTION
PRINT'职工'+@name+'的信息成功添加到表worker中'
(2)验证存储过程
USEfactory
GO
Addworker20,'陈立','女','55/03/08','否','75/10/10',4
GO
SELECT职工号,姓名,性别,党员否FROMworker
GO
2.
(1)建立存储程序
USEfactory
GO
CREATEPROCEDUREDelworker
@noint=NULL
AS
IF@noISNULL
BEGIN
PRINT'必须输入职工号!
'
RETURN
END
BEGINTRANSACTION
DELETEFROMworkerWHERE职工号=@no
IF@@error<>0
BEGIN
ROLLBACKTRAN
RETURN
END
COMMITTRANSACTION
PRINT'成功删除职工号为'+CAST(@noASCHAR
(2))+'的职工记录'
执行下列语句,可验证存储过程的正确性:
USEfactory
GO
Delworker20
GO
SELECT职工号,姓名,性别,党员否FROMworker
GO
3.
USEfactory
GO
EXECsp_helptextDelworker
GO
4.
USEfactory
GO
IFEXISTS(SELECTnameFROMsysobjects
WHEREname='Addworker'ANDtype='P')
DROPPROCEDUREAddworker
GO
IFEXISTS(SELECTnameFROMsysobjects
WHEREname='Delworker'ANDtype='P')
DROPPROCEDUREDelworker
GO
5.建立触发器depart_update的程序如下:
USEfactory
GO
IFEXISTS(SELECTnameFROMsysobjects
WHEREtype='TR'ANDname='depart_update')
DROPTRIGGERdepart_update
GO
CREATETRIGGERdepart_updateONdepart
AFTERUPDATE
AS
DECLARE@olddepnoint,@newdepnoint
SELECT@olddepno=部门号FROMdeleted
SELECT@newdepno=部门号FROMinserted
UPDATEworker
SET部门号=@newdepno
WHERE部门号=@olddepno
GO
执行下列语句,可验证存储过程的正确性:
USEfactory
GO
PRINT'将部门号改为'
UPDATEdepart
SET部门号=105
WHERE部门号=101
GO
SELECT职工号,姓名,部门号FROMworker
GO
PRINT'将部门号改为'
UPDATEdepart
SET部门号=101
WHERE部门号=105
GO
SELECT职工号,姓名,部门号FROMworker
GO
6.建立触发器worker_delete的程序如下:
USEfactory
GO
IFEXISTS(SELECTnameFROMsysobjects
WHEREtype='TR'ANDname='worker_delete')
DROPTRIGGERworker_delete
GO
CREATETRIGGERworker_deleteONworker
FORDELETE
AS
DECLARE@noint
SELECT@no=职工号FROMdeleted
DELETEFROMsalary
WHERE职工号=@no
GO
执行下列语句,可验证存储过程的正确性:
USEfactory
GO
PRINT'删除前的工资记录'
SELECT*FROMsalary
GO
DELETEFROMworker
WHERE职工号=15
GO
PRINT'删除职工号为的职工记录后的工资记录'
SELECT*FROMsalary
GO
7.删除触发器depart_update的程序如下:
USEfactory
GO
DROPTRIGGERdepart_update
GO
8.删除触发器worker_delete的程序如下:
USEfactory
GO
DROPTRIGGERworker_delete
GO
四.测试数据与实验结果
第1题图
第2题图
第3题图
第5题图
第6题图
五.结果分析与实验体会
CREATEPROCEDURE语句允许创建、编译并在MS-SQLServer上保存存储过程。
在默认情况下,只有数据库拥有者(DBO)具有对数据库的CREATEPROCEDURE访问权。
但是,DBO可执行以下形式的GRANT语句向由语句中的
GRANTCREATEPROCEDURE
CREATEPROCEDURE语句的句法如下:
CREATEPROCEDURE
[{@
[=
[…,n]}]
[WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FORREPLICATION]
AS
其中:
通过在执行命令中包括版本号从而执行指定版本的存储过程,如下面的语句所示:
EXECusp_proc;2。
如果调用存储过程时没有指定版本号,DBMS将执行具有相同名称的存储过程组中最高版本号的存储过程。
通过在DROP语句中包括版本号,如DROPPROCEDUREusp_proc;2所示,可以删除特定版本号的存储过程,或者忽略版本号,如DROPPROCEDUREusp_proc从而一次删除存储过程的所有版本。
每个参数的值必须在存储过程调用中提供或者作为CREATEPROCEDURE语句的一部分设置为缺省值。
虽然参数可用作存储过程中的变量名,但参数不能用作列名、表名或是其他数据库对象的名称。
参数可以是任何合法的SQL数据类型(包括TEXT、NTEXT和IMAGE)或用户定义的数据类型。
如果参数是CURSOR数据类型,该参数还必须被指定为VARYING和OUTPUT。
VARYING仅对数据类型为CURSOR的参数才是合法的。
指明该参数将包括内容会变化的结果集,其内容由存储过程中的语句动态地构成。
如果指定,则过程可在不指定参数的情况下执行。
OUTPUT指明参数在存储过程中可以变化,而且修改后的值可返回给主调过程。
…,n指明CREATEPROCEDURE语句可有多达2100个参数。
RECOMPILE每当存储过程被调用时告诉MS-SQLServer都要进行编译(也就是生成新的执行计划)。
如果没有此选项项,DBMS在执行CREATEPROCEDURE语句时编码存储过程,每次调用时都使用同一执行计划。
ENCRYPTION告诉MS-SQLServer加密SYSCOMMENTS表中存储过程条目的文本,以防止用户查看编译后的存储过程中的语句。
指定此选项还可防止存储过程被除数作为MS-SQLServer的复制过程而分开。
由于创建的触发器在条件成立时会自动被调用,可能影响后面示例的执行,所以当一个触发器不再需要时,需将其禁用,禁用trigop触发器的操作是:
选中factory表节点,展开下方的触发器节点,右击trigop,在出现的快捷菜单中选择禁用命令。
如要重新启动已禁用的触发器,在这里选择启用命令即可启动该触发器。
SQLServer2005中创建的DML触发器有两种:
旧类型的触发器和INSTEADOF触发器。
旧类型触发器现在叫AFTER触发器,这种类型的触发器在INSERT、UPDATE或DELETE语句执行后才会触发执行,并且只能定义在表上。
当用户创建旧类型触发器时,应使用新关键字(AFTER),出于兼容性考虑,旧的关键字(FOR)任然能够使用,但是不推荐再使用它。
如有侵权请联系告知删除,感谢你们的配合!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 触发器 报告