数据库实验6触发器实验报告.docx

上传人:b****2 文档编号:1897641 上传时间:2023-05-02 格式:DOCX 页数:13 大小:235.31KB
下载 相关 举报
数据库实验6触发器实验报告.docx_第1页
第1页 / 共13页
数据库实验6触发器实验报告.docx_第2页
第2页 / 共13页
数据库实验6触发器实验报告.docx_第3页
第3页 / 共13页
数据库实验6触发器实验报告.docx_第4页
第4页 / 共13页
数据库实验6触发器实验报告.docx_第5页
第5页 / 共13页
数据库实验6触发器实验报告.docx_第6页
第6页 / 共13页
数据库实验6触发器实验报告.docx_第7页
第7页 / 共13页
数据库实验6触发器实验报告.docx_第8页
第8页 / 共13页
数据库实验6触发器实验报告.docx_第9页
第9页 / 共13页
数据库实验6触发器实验报告.docx_第10页
第10页 / 共13页
数据库实验6触发器实验报告.docx_第11页
第11页 / 共13页
数据库实验6触发器实验报告.docx_第12页
第12页 / 共13页
数据库实验6触发器实验报告.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据库实验6触发器实验报告.docx

《数据库实验6触发器实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验6触发器实验报告.docx(13页珍藏版)》请在冰点文库上搜索。

数据库实验6触发器实验报告.docx

数据库实验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语句向由语句中的所标识的用户ID授予CREATEPROCEDURE访问权:

GRANTCREATEPROCEDURE

CREATEPROCEDURE语句的句法如下:

CREATEPROCEDURE[;]

[{@[VARYING]

[=][OUTPUT]

[…,n]}]

[WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]

[FORREPLICATION]

AS

其中:

是存储过程的名称,名称至多可有128个字符。

允许创建多个有相同名称的存储过程。

通过在执行命令中包括版本号从而执行指定版本的存储过程,如下面的语句所示:

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)任然能够使用,但是不推荐再使用它。

如有侵权请联系告知删除,感谢你们的配合!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2