数据库实验指导书2009(7)

2019-02-20 22:15

--创建存储过程

use student go

create procedure stu_info @sno varchar(8)

as

select 班级=substring(s.sno,1,len(s.sno)-2), s.sno as 学号, sname as 姓名, sex as 性别,

birthday as 出生日期 polity as 政治面貌 from s

where sno=@sno

(四) 执行存储过程的方法

存储过程创建成功后,保存在数据库中。在SQL Server中可以使用EXECUTE命令来直接执行存储过程。语法如下: [[EXEC[UTE]]

{

[@RETURN_STATUS=]

{procedure_name[;number]│@procedure_name_var} [[@parameter=]{value│@variable[OUTPUT]│[DEFAULT]} [,?n]

[WITH RECOMPILE]

说明:

EXECUTE:执行存储过程的命令关键字,若此语句是批处理中的第一条语句,可以省略此关键字。

@RETURN_STATUS:是一个可选的整型变量,保存存储过程的返回状态。这个变量在使用前,必须在批处理、存储过程或函数中申明过。

procedure_name:指定执行的存储过程名称。

@procedure_name_var:局部定义变量名,代表存储过程名称。

@parameter:在创建存储过程时定义的过程参数。调用时向存储过程所传递的参数值由value参数或@varible变量提供,或者使用DEFAULT关键字指定使用该参数的默认值,OUTPUT参数说明指定参数为返回参数。

例1:执行前面例1中创建的StuInfo存储过程。 Use student

Exec StuInfo /*或者直接写存储过程的名称StuInfo*/

注意:如果省略Exec关键字,则存储过程必须是批处理中的第一条语句,否则会出错。 例2:执行前面例2中创建的StuScoreInfo存储过程。 Use student

Exec StuScoreInfo

例3:执行前面例3中创建的Stu_Info存储过程,该存储过程有一个输入参数“学号”,在执行时要传入一个学号值。

30

Use student

Exec Stu_Info ‘20050001’ 或:

Use student

Exec Stu_Info @sno=‘20050001’

(五) 查看存储过程

1. 使用企业管理器查看用户创建的存储过程:在企业管理器中,选择指定的服务器和数据库,单击“存储过程”文件夹,在右边的页框中右击要查看的存储过程,在弹出的快捷菜单中选择“属性”选项,弹出“存储过程属性”对话框,在此对话框中可看到存储过程的源代码。

2. 使用系统存储过程查看用户创建的存储过程: sp_help [[@objname=]name]

用于显示存储过程的参数及其数据类型。 sp_helptext [[@objname=]name] 用于显示存储过程的代码。

sp_depends [@objname=]’object’

用于显示和存储过程相关的数据库对象。 (六) 修改存储过程

1. 使用企业管理器修改存储过程在企业管理器中,选择指定的服务器和数据库,单击“存储过程”文件夹,在右边的页框中右击要查看的存储过程,在弹出的快捷菜单中选择“属性”选项,弹出“存储过程属性”对话框,在此对话框中可直接修改存储过程的代码。 2. 使用T_SQl修改存储过程

ALTER PROC[EDURE] procedure-name[;number] [{@parameter data_type}

[varying][=default][outpur]][,?n]

WITH

{RECOMPILE│ENCRYPTION│RECOMPILE,ENCRYPTION}]

[FOR REPLICATION]AS sql_statement [?n] 例1:修改前面创建的stu_info存储过程,使之完成以下功能:根据传入的学号,在表s,c,sc中查询此学生的班级、姓名、性别、考试课程名称和考试分数。 Use student

Alter procedure stu_info @sno varchar(10) as

select班级=substring(s.sno,1,len(s.sno)-2), sname as 姓名, sex as 性别,

c.cname as 课程名称, score as 考试成绩

from s,c,sc

where s.sno=@sno and s.sno=sc.sno and c.cno=sc.cno exec stu_info ‘20050101’ (七) 重命名存储过程

31

3. 使用企业管理器修改存储过程在企业管理器中,右击要操作的存储过程,在弹出的快捷菜单中选择“重命名”选项。 4. 使用T_SQl修改存储过程

sp_rename 原存储过程名称,新存储过程名称 (八) 删除存储过程

5. 使用企业管理器修改存储过程在企业管理器中,右击要操作的存储过程,在弹出的快捷菜单中选择“删除”选项。

6. 使用T_SQl修改存储过程

drop procedure {procedure} [,?n] 实验习题:

说明:学号以四位年级,两位班级,两位编号的形式编码。例如“20070101”表示2007级01班的01号同学。

1. 创建一个无参存储过程,返回200502班的学生信息。

2. 创建一个带参数的存储过程,输入参数为课程名称,查询有哪些班级的哪些学生参加了这门课程的考试及学生的考试成绩。 3. 对于pubs数据库完成如下操作:

(1) 创建存储过程avg_price,用于求所有出版图书的平均单价。并通过输出参数返回

该平均单价。要求在创建存储过程前要先判断该存储过程是否已存在,如果存在,则将其删除。 (2) 执行第(1)题创建的存储过程,打印图书平均单价。

(3) 在pubs数据库中创建存储过程max_price,根据指定的图书类型(输入参数)返回该类图书的最高单价(输出参数)。要求在创建存储过程前要先判断该存储过程是否已存在,如果存在,则将其删除。

(4) 执行第(3)题创建的存储过程,指定图书类型那个为“mod_cook”,打印该类图书

的最高单价。 (5) 删除存储过程avg_price和max_price。 实验报告要求: ? ? ? ? ?

实验目的 实验内容及步骤 实验习题的源程序清单

写出在实验过程中遇到的问题及解决方法 要求字迹端正、条理清晰、概念正确

32

实 验 八

实验名称:触发器的创建和使用 实验学时:2

实验目的:

1) 了解触发器和一般存储过程的主要区别 2) 了解使用触发器的优点 3) 掌握创建触发器的方法 4) 掌握查看触发器信息的方法 5) 了解删除触发器的方法 实验内容及步骤:

(一) 触发器的概念

触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程。一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行触发器是一个功能强大的工具,它与表格紧密相连,在表中数据发生变化时自动强制执行。触发器可以用于SQL Server约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。

(二) 触发器的优点 ? ? ? ? ?

触发器是自动的执行的。当对表中的数据做了任何修改之后立即被激活。 触发器可以通过数据库中的相关表进行层叠更改。 触发器可以强制限制。

AFTER触发器:这种类型的触发器将在数据变动完成后才被触发,AFTER触发器只能在表上定义。在同一个数据表中可以创建多个AFTER触发器。

INSTEAD OF触发器:SQL Server 2000新增功能。这种类型的触发器将在数据变动以前被触发,并取代变动数据的操作,而去执行触发器定义的操作。INSTEAD OF触发器可以在表或视图上定义。在表或视图上,每个INSERT、UPDATE和DELETE语句最多可以定义一个INSTEAD OF触发器。 (四) 触发器的创建

? 使用企业管理器创建:在企业管理器中,展开指定的服务器和数据库,右击某个表,从弹出的快捷菜单中依次选择“所有任务|管理触发器”选项,会出现触发器属性对话框。在该对话框的“名称”文本框中选择“新建”,然后在文本框中输入创建触发器的文本。

当创建一个触发器时必须指定以下几项内容:

? ? ?

触发器的名称 在其定义触发器的表 触发器将何时激发

(三) 触发器的类型

? 执行触发操作的编程语句 例如:创建一个INSERT触发器,当在表s中插入一条新记录时,触发该触发器,并给出“你插入了一条新记录!”的提示信息。在文本框中输入以下文本: CREATE TRIGGER Stu_Insert on [dbo].[s] FOR INSERT AS

DECLARE @msg char(30)

SET @msg=”你插入了一条新记录!”print @msg

33

单击“检查语法”按钮,可以检查语法是否正确。然后单击“应用”按钮,在名称下拉列表中出现新创建的Stu_Insert触发器的名称,单击“确定”按钮,即可关闭该对话框,成功创建触发器。

创建该触发器后,查看向t_student表中插入数据时此触发器所完成的功能。在查询分析器中输入以下SQL语句: use student go

insert into t_student (sno,sname,sex)

values(‘20030125’,’王帆’,‘男’) 执行后结果如下:

你插入了一条新记录!

(所影响的行数为1行)

? 使用T-SQL创建:使用Transact-SQL语言中的CREATE TRIGGER命令可以创建触发器,其中需要指定定义触发器的基表、触发器执行的事件和触发器的所有指令。创建触发器类似创建存储过程,语法形式如下: CREATE TRIGGER trigger-name ON{table│view} [WITH ENCRYPTION]

{

{{FOR│AFTER│INSTEAD OF}{[DELETE][,][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:触发器的名称,必须唯一且符合标识符命名规则。

AFTER:用于规定此触发器只有在触发SQL语句中指定的所有操作都已成功执行后才激发。若仅指定FOR关键字,则AFTER是默认设置。注意该类型触发器仅能在表上创建,而不能在视图上定义该触发器。

INSTEAD OF:用于规定执行的是触发器而不是执行触发SQL语句,从而用触发器替代触发语句的操作。每个INSERT、UPDATE、DELETE语句最多可以定义一个INSTEAD OF触发器。INSTEAD OF触发器不能在WITH CHECK OPTION 的可更新视图上定义。

{[DELETE][,][INSERT][,][UPDATE]}:用于指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选项。

34


数据库实验指导书2009(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小学语文阅读写作一体化的教学策略

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: