实验六 存储过程和触发器
《数据库原理与应用》实验存储过程和触发器(部分答案)
实验6存储过程和触发器
1.实验目的
(1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE创建存储过程的方法和步骤。
(2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。
(3)掌握通过SQL Server管理平台和Transact-SQL语句ALTER PROCEDURE修改存储过程的方法。
(4)掌握通过SQL Server管理平台和Transact-SQL语句DROP PROCEDURE删除存储过程的方法。
(5)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER创建触发器的方法和步骤。
(6)掌握引发触发器的方法。
(7)掌握使用SQL Server管理平台或Transact-SQL语句修改和删除触发器。
(8)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。
2.实验内容及步骤
请先附加studentsdb数据库,然后完成以下实验。
(1)在查询设计器中输入以下代码,创建一个利用流控制语句的存储过程
letters_print,该存储过程能够显示个小写字母。
语句:
CREATE PROCEDURE letters_print
AS
DECLARE@count int
SET@count=0
WHILE@count<26
BEGIN
PRINT CHAR(ASCII('a')+@count)
SET@count=@count+1
END
exec letters_print
(2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。
数据库实验6触发器实验报告
淮海工学院计算机工程学院实验报告书
课程名:《数据库原理及应用》
题目:存储过程和触发器
班级:软件132
学号: 2013122907
姓名:孙莹莹
一.目的与要求
1.掌握存储过程的创建方法;
2.掌握存储过程的执行、修改和删除等操作;
3.掌握触发器的创建方法;
4.掌握触发器的使用、修改和删除等相关内容
二.实验内容
基于前面建立的factory数据库,使用T-SQL语句完成如下各小题的功能:
1.创建一个为worker表添加职工记录的存储过程Addworker;
2.创建一个存储过程Delworker删除worker表中指定职工号的记录。
3.显示存储过程Delworker;
4.删除存储过程Addworker和Delworker.
三.实验步骤
1 .
(1)建立存储过程
USE factory
GO
CREATE PROCEDURE Addworker
@no int=NULL,
@name char(10)=NULL,
@sex char(2)=NULL,
@birthday datetime=NULL,
@na char(2)=NULL,
@wtime datetime=NULL,
@depno int=NULL
AS
IF @no IS NULL OR @name IS NULL OR @sex IS NULL OR
@birthday IS NULL OR @depno IS NULL
BEGIN
PRINT '请重新输入该职工信息!'
PRINT '你必须提供职工号、姓名、性别、出生日期、部门号'
RETURN
END
BEGIN TRANSACTION
存储过程与触发器实验报告
存储过程与触发器实验报告
一、引言
存储过程和触发器是数据库中常用的高级功能,它们能够提高数据库的性能、数据一致性和安全性。本实验报告将详细介绍存储过程和触发器的概念、用途以及实际应用。
二、存储过程
2.1 概念
存储过程是一组预定义的SQL语句集合,它们被命名并存储在数据库中,可以作为一个单元来调用和执行。存储过程可以接受参数,并返回一个或多个结果集。存储过程可以在应用程序层面减少网络传输,提高数据库性能。
2.2 用途
存储过程的应用非常广泛,主要用于以下几个方面: 1. 数据库业务逻辑封装:将复杂的业务逻辑封装到存储过程中,使应用程序只需调用存储过程而不需要编写大量的SQL语句,简化应用程序的开发。 2. 数据库性能优化:通过存储过程可以减少网络传输,提高数据库性能。 3. 数据库安全性:通过存储过程,可以实现对数据库的访问权限控制,提高数据库的安全性。
2.3 示例
下面以一个简单的示例来说明存储过程的使用。
2.3.1 创建存储过程
CREATE PROCEDURE `get_employee_by_department` (IN department_id INT)
BEGIN
SELECT * FROM employee WHERE department_id = department_id;
END
2.3.2 调用存储过程
CALL `get_employee_by_department`(1);
2.4 优化技巧
为了进一步提高存储过程的性能,可以采用以下优化技巧: 1. 减少存储过程的参数:过多的参数会增加网络传输的负担,应尽量减少存储过程的参数数量。 2. 避免长时间占用资源:存储过程应尽量快速执行,避免长时间占用数据库资源。
触发器与存储过程
触发器与存储过程
触发器(Trigger)是数据库中的一种特殊对象,它与一些特定的数据库事件相关联,并且当这个事件发生时,触发器可以在自动执行的过程中被触发。而存储过程(Stored Procedure)则是一段预先编译好的SQL 语句的集合,它可以被保存在数据库服务器端,通过调用来执行。
触发器和存储过程都是数据库中的重要组件,它们都可以用于实现数据的自动化处理和一些复杂的业务逻辑。但是它们在功能和使用方法上有一些不同之处。
首先,触发器的触发条件是事先设置好的,当该条件满足时才会被触发执行,而存储过程是主动调用执行的。触发器通常与数据库中的表相关联,并且在表上的插入、更新或删除等事件发生时触发。存储过程可以在任何时候被调用执行,无论是否有其他数据库事件发生。
其次,触发器通常用于实现数据的自动化处理,比如在插入新纪录时通过触发器自动计算一些字段的值,或者在删除记录时触发器做一些相关操作。而存储过程则更倾向于实现业务逻辑的封装和复用,比如在一个库存管理系统中,可以使用存储过程来实现添加商品、修改商品信息、删除商品等操作。
此外,触发器由数据库引擎直接管理,它是与数据库表密切相关的一种对象,所以当表被删除或者修改时,相关联的触发器也会相应地被删除或修改。而存储过程则是作为独立于表的对象存在,当数据库表被删除或修改时,存储过程不受影响。
在使用上,触发器和存储过程都可以用于实现一些相同的功能,但触发器更适合于在特定的数据库事件发生时执行自动化的操作,而存储过程更适合于实现复杂的业务逻辑和一些需要主动调用的场景。
存储过程、触发器和函数实验
存储过程、触发器和用户自定义函数实验实验内容一
练习教材中存储过程、触发器和用户自定义函数的例子。教材中的BookSales数据库,在群共享中,文件名为。
实验内容二
针对附件1中的教学活动数据库,完成下面的实验内容。
1、存储过程
(1)创建一个存储过程,该存储过程统计“高等数学”的成绩分布情况,即按照各分数段统计人数。
(2)创建一个存储过程,该存储过程有一个参数用来接收课程号,该存储过程统计给定课程的平均成绩。
(3)创建一个存储过程,该存储过程将学生选课成绩从百分制改为等级制(即 A、B、C、D、E)。
(4)创建一个存储过程,该存储过程有一个参数用来接收学生姓名,该存储过程查询该学生的学号以及选修课程的门数。
(5)创建一个存储过程,该存储过程有两个输入参数用来接收学号和课程号,一个输出参数用于获取相应学号和课程号对应的成绩。
2、触发器
(1)为study表创建一个UPDATE触发器,当更新成绩时,要求更新后的成绩不能低于原来的成绩。
(2)为study表创建一个DELETE触发器,要求一次只能从study表中删除一条记录。
(3)为course表创建一个INSERT触发器,要求插入的课程记录中任课教师不能为空。
3、用户自定义函数
(1)创建一个返回标量值的用户定义函数 RectangleArea:输入矩形的长和宽就能计算矩形的面积。
create function RectangleArea(@a int,@b int)returns int
as
begin
return@a*@b
end
(2)创建一个用户自定义函数,功能为产生一张有关学生成绩统计的报表。该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。调用这个函数,生成相应的报表并给用户浏览。
实验六触发器、存储过程编程实验
实验六触发器、存储过程编程实验
一、实验目的
学习存储过程和触发器的创建和使用方法。
二、实验环境
硬件:PC机
软件:SQL Server 2000
三、实验原理
1.触发器
触发器是一种特殊的过程,它不带参数,不被用户和程序调用,只能由用户对数据库中的表的操作(插入、删除、修改)触发。因此,可以利用触发器来维护表间的数据一致性。
触发器只能在表上建立,一张表最多可有3个触发器,即插入触发器、删除触发器、修改触发器,分别由插入、删除、修改操作触发。
触发器可以查询其它表,而且可以包含复杂的SQL语句。它们主要用于强制复杂的业务规则及数据完整性。
⑴创建触发器
创建触发器时需指定:
●名称。
●在其上定义触发器的表。
●触发器将何时激发。
●激活触发器的数据修改语句。有效选项为INSERT、UPDATE或DELETE。多个
数据修改语句可激活同一个触发器。例如,触发器可由INSERT或UPDATE语句
激活。
●执行触发操作的编程语句。
语法:
CREATE TRIGGER 触发器名
ON {表名| 视图名}
{ FOR | AFTER | INSTEAD OF } { [DELETE] [,] [INSERT] [,] [UPDATE] }
AS
SQL语句块
RETURN
⑵使用inserted和deleted表
触发器语句中使用了两种特殊的表:deleted表和inserted表。Microsoft SQL Server
2000 自动创建和管理这些表。可以使用这两个临时的驻留内存的表测试某些数据修改的效果及设置触发器操作的条件;然而,不能直接对表中的数据进行更改。
实验六存储过程和触发器
实验六存储过程和触发器
142208100149 陈聪
1、目的与要求
(1)掌握存储过程的使用方法。
(2)掌握触发器的使用方法。
2、实验准备
(1)了解存储过程的使用方法。
(2)了解触发器的使用过程。
(3)了解inserted逻辑表和deleted逻辑表的使用。
(4)了解如何编写CRL存储过程与触发器。
3、实验内容。
(1)存储过程。
①创建存储过程,使用Employees表中的员工人数来初始化一个局部变量,并调用这个存储过程。
注:此段T-SQL命令,书上变量名书写错误,漏掉了下划线。(@nu_MBER1和@nu MBER1区别)
执行该存储过程,并查看结果。
②创建存储过程,比较两个员工的实际收入,若前者比后者高就输出0,否则输出1.
执行该存储过程并查改结果。
③创建添加职员记录的存储过程EmployeeAdd。
执行该存储过程。
执行上面T-SQL命令,在结果栏中显示一行受影响,说明结果已经插入成功,在表Employees中也够看到结果已经存在。
④创建存储过程,使用游标确定一个员工的实际收入是否排在前3名。结果为1表示是,结果为0表示否。
执行该存储过程,在结果栏中显示,命令已成功完成,并且在左侧对象资源管理器中进行刷新会显示刚刚创建的存储过程。
执行该存储过程:
上面T-SQL结果中输出“1”,代表着员工“108991”的实际收入排在前三名。
【思考与练习】
A、创建存储过程,要求当一个员工的工作年份大于6年时,将其转到经理办公室工作。
创建这个存储过程时候,在存储过程的条件判断中我添加了一项,判断工作年份在6年以上的员工是否在经理办公室,只有不在经理办公室的时候才进行调整,这样更符合实际问题些。
第6章_存储过程与触发器new
GROUP BY St_Info.St_Name GO
6
存储过程执行
7
6.2 触发器
触发器(trigger)
是一种特殊类型的存储过程它在指定的表中的数据 发生变化时自动执行。 发生变化时自动执行。
触发器与存储过程的区别: 触发器与存储过程的区别:
触发器主要是通过事件进行触发而被执行; 触发器主要是通过事件进行触发而被执行; 事件进行触发而被执行 存储过程通过存储过程名字而被直接调用。 存储过程名字而被直接调用 存储过程通过存储过程名字而被直接调用。
USE student_db GO CREATE TRIGGER DelCourse ON C_Info FOR DELETE AS DELETE S_C_Info WHERE C_No IN (SELECT C_No FROM deleted) (SELECT deleted) GO
11
谢谢! 谢谢!
4
6.1 存储过程
创建和执行存储过程
创建存储过程就是如何定义存储过程名称、参数、 创建存储过程就是如何定义存储过程名称、参数、 定义存储过程名称 SQL 语句主体。 语句主体。
创建存储过程有3种方法: 创建存储过程有 种方法: 种方法
使用企业管理器 使用向导 使用Transact-SQL语言 使用 语言
执行存储过程(可用命令EXECUTE或查询分析器) 执行存储过程(可用命令 或查询分析器
存储过程与触发器实验报告
存储过程与触发器实验报告
本实验旨在探究存储过程与触发器的概念、作用、使用范围和创建过程,并且通过编写相关的示例代码来展示它们的实际应用。
一、实验原理
1. 存储过程
存储过程是一组预定义好的 SQL 语句,可以重复使用并且可
以直接被调用。它类似于程序中的函数,可以接受参数、返回值、流程控制等。
2. 触发器
触发器是与数据库表相关的事件响应机制,可以在数据库表上定义一些触发条件,当满足这些条件时就会触发执行一些操作,比如插入、更新或删除数据。
二、实验步骤
1. 存储过程的创建与使用
(1)创建一个用于统计某个用户的订单数量的存储过程。
```
DELIMITER //
CREATE PROCEDURE `getOrderCount`(IN p_userid INT, OUT
p_count INT)
BEGIN
SELECT COUNT(*) INTO p_count FROM orders WHERE user_id = p_userid;
END//
DELIMITER ;
```
(2)调用这个存储过程,并输出结果。
```
CALL getOrderCount(123, @count);
SELECT @count AS 'order_count';
```
2. 触发器的创建与使用
(1)创建一个在用户表中插入新记录时自动生成一个账户记录的触发器。
```
DELIMITER //
CREATE TRIGGER `insert_user_account` AFTER INSERT ON `users` FOR EACH ROW
实验六存储过程和触发器
实验六存储过程和触发器
实验六存储过程和触发器
1.实验⽬的
(1) 掌握存储过程和触发器的基本概念和功能
(2) 掌握创建,管理存储过程的⽅法
(3) 掌握创建,管理触发器的⽅法
2.实验内容及步骤
(1) 利⽤SQL Server Management Studio创建⼀个存储过程ProcNum,查询每个班级中学⽣的⼈数,按班级号升序排序.
在查询编辑器的存储过程模板中输⼊如下创建存储过程的代码并执⾏.
USE teaching
GO
CREATE PROCEDURE ProcNum AS
SELECT classno,COUNT(*)AS number FROM student
GROUP BY classno ORDER BY classno ASC
GO
EXEC ProcNum
(2) 利⽤Transact-SQL语句创建⼀个带有参数的存储过程ProcInsert,向score 表插⼊⼀条选课记录,并查询该学⽣的姓名,选课的所有课程名称,平时成绩和期末成绩.
<1> 在查询编辑器输⼊如下创建存储过程的代码并执⾏.
USE teaching
GO
CREATE PROCEDURE ProcInsert(@sno NCHAR(10),@cno NCHAR(6),@usually NUMERIC(6,2),@final NUMERIC(6,2))AS
INSERT INTO score VALUES (@sno,@cno,@usually,@final)
SELECT sname,cname,usually,final
整理实验六-存储过程和触发器
实验六存储过程和触发器
整理表
姓名:
职业工种:
申请级别:
受理机构:
填报日期:
A4打印/ 修订/ 内容可编辑
《大型数据库》课程教学大纲
课程简介
Microsoft SQL Server 2000是一个客户机/服务器关系型数据库系统,它使用Transact-SQL语言在客户机与SQL Server数据库服务器之间发送请求。SQL Server 2000是Microsoft 公司推出的一个全新的数据库服务器产品,是一个企业级的网络关系型数据库管理系统,该产品拥有的种种新特性使它成为数据库服务器产品中的佼佼者,并且越来越得到广大用户的青睐。
SQL SERVER2000推出后广受欢迎.它使用了最先进的数据库构架,与windowsNT/2000平台紧密集成,具有完全的WEB功能,人们用它可方便地管理数据库和开发应用程序.它通过对高端硬件平台,网络和存储技术的支持,能在INTERNET商业领域快速建立应用.此外,还增强了安全性,支持基于角色的安全并拥有安全审计工具。
如果作为一般的程序应用,SQL SERVER2000是非常方便的,但要作为系统管理员,要掌握这样一个复杂而庞大的系统管理,需要进行大量的学习与实践.本课程在学生已初步掌握SQL SERVER 数据库对象的基础上,重点介绍SQL SERVER这一大型数据库的系统管理,为以后从事有关方面的工作打下良好的基础。
课程大纲
一、课程的性质和任务:
本课程作为计算机科学与技术的专业课程,主要任务是讲授如何使用SQL Server 2000 进行程序设计以及对数据库进行适当地管理。通过理论指导和上机实践相结合的方式,使学生能熟练使用Transact-SQL语言并能进行简单编程;掌握保证数据完整性和数据安全性的技术;掌握数据库常规管理技术;了解客户端开发工具与大型数据库(SQL SERVER 2000)配合开发数据库应用系统的关键技术。
06存储过程与触发器
本章要点
目 录 上一页
下一页 退 出
存储过程
触发器
小 结
2
存储过程
目 录 上一页
下一页 退 出
存储过程:由流控制和SQL语句书写的过程
– SQL语句执行的时候要先编译再执行。存储过 程就是编译好了的一些SQL语句,应用程序需 要用的时候直接调用,效率较高
• 可以自动执行(放在master数据库中),也可以在应 用程序中调用 • 自定义的存储过程属于定义它的那个数据库
– 每更新或插入一行,都会触发as后面的代码
9பைடு நூலகம்
虚拟表
目 录 上一页
下一页 退 出
内存中的两个虚拟表
– Inserted:存放触发事件的SQL语言所插入或更 新后的那条新记录 – Deleted:存放更新前和删除后的那条旧记录
管理触发器
修改触发器:alter trigger 触发器名…
10
例二:因对表1的操作触发更新表2
12
例四:instead of替代触发器
目 录 上一页
下一页 退 出
较多用于基于视图的操作触发一段代码,用 这段代码“替代”原本对于视图的SQL命令, 原本的SQL命令不再执行
– 因为视图若涉及多个表,则不允许更新或插入
13
例四
目 录 上一页
数据库实验-存储过程、触发器
insert into C values('13','C#语言',null,7)
执行结果:命令已成功完成。
如图:
(8)定义一个AFTER行级触发器,当SC表的成绩发生变动时,就自动在成绩变化表sc_log中增加一条新的纪录,该新纪录包括:操作者名称、操作日期、操作类型。
(9)建立一个DELETE触发器,针对于SC表,每次只能删除一条信息。
(3)建立一个DELETE触发器,针对于SC表,每次只能删除一条信息。
(4)建立一个UPDATE的触发器,不允许用户更改学生学号,若更改学号,给出提示信息:学号不允许更改。
(5)执行相应的SQL语句,触发上述定义的触发器。
(6)删除触发器credit_TRIGER。
四实验要求
1.掌握存储过程的定义和使用方法。
代码:
create proc proc4
@Sno char(12),
@avg int output
as
select @avg=avg(Grade) from SC
where Sno=@Sno
declare @avg int
exec proc4 '1',@avg output
select @avg
执行结果:命令已成功完成。
from SC
group by Sno
实验6 游标、存储过程和触发器
实验六游标、存储过程与触发器
一、实验目的
掌握使用T-SQL实现游标、存储过程和触发器的创建,使用方法。
二、实验内容
在实验一、实验二创建的表中用T-SQL语句完成以下内容:
1.使用游标实现将及格的选课信息输出。
2.使用游标将SPJ表中的偶数行输出。
3.创建存储过程,查询赵永亮所修课程的课程信息,将课程号和课程名输出。
4.创建存储过程,统计指定学生修课的平均成绩和选课门数,将统计的结果用输出参数返回。
5.创建存储过程,在学生表Student中插入一条完整的元组。
6.创建存储过程,根据用户指定的供应商号删除SPJ表中相应的供货信息。
7.创建存储过程,将指定零件的重量增加指定的值。
8.用触发器实现约束:如果是北京的供应商,供应任何零件的数量不能少于300,如果少于则自动改为300。
9.在SC关系中增加新属性列Status,用来记录课程成绩的等级,0-59分为“不合格”,60-69为“合格”,70-89为“良好”,90以上为“优秀”。要求status属性列的值由用户在插入、更新选课成绩时系统自动填写和更新。
实验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
实验六报告规范
实验六 存储过程和触发器
实验报告
学院:信息学院 班级:_____通信工程___
学号: _20091060157_ 姓名:__宗安__ 成
绩:
【实验目的】
1、掌握存储过程的创建。
2、掌握存储过程的执行。
3、掌握存储过程的修改和删除。
4、掌握触发器的创建和使用。
【实验内容】
2、创建存储过程GetOrder_details的SQL语句。
create proc GetOrder_details as
select
OrderDate,AddressOfDelivery,DeliveryDate,Price,Name,QtyOrdered,Price*QtyOrd as AllPrice from Orders,Products,Order_Details group by OrderNo
3、(1)输入参数为‘1002’,调用存储过程的SQL语句。
(2)执行结果。(抓图)
4、(1)修改存储过程GetOrder_details后的SQL语句。
(2)输入参数为‘1003’,调用存储过程的SQL语句。
(3)执行结果。(抓图)
5、(1)说明触发器attention完成的功能。
(2)触发attention的SQL语句.
(3)触发结果(抓图)。
6、(1)增加update触发后,触发attention的SQL语句。
(2)触发结果(抓图)。
【思考题】
1、(1)创建存储过程CountryCruise的SQL语句。
(2)输入参数‘澳大利亚’,调用存储过程CountryCruise的SQL语
句。
(3)执行结果。(抓图)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六存储过程和触发器(2学时)
1.实验目的
(1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE创建存储过程的方法和步骤。
(2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。
(3)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER创建触发器的方法和步骤。
(4)掌握引发触发器的方法。
(5)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。
2.实验内容
(1)输入以下T-SQL代码,创建一个利用流控制语句的存储过程letters_print,该存储过程能够显示26个小写字母。
CREATE PROCEDURE letters_print
AS
DECLARE @count int
SET @count=0
WHILE @count<26
BEGIN
PRINT CHAR(ASCII('a')+ @count)
SET @count=@count +1
END
使用EXECUTE命令执行letters_print存储过程。
(2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。
CREATE PROCEDURE stu_info @name varchar(40)
AS
SELECT a.no,name,cno,grade
FROM Student a INNER JOIN grade b
ON a.no= b.sno
WHERE name= @name
使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。
如果存储过程stu_info执行时没有提供参数,要求能按默认值查询(设姓名为“刘卫平”),如何修改该过程的定义?
(3)使用student_db数据库中的Student表、course表、grade表。
①创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名称、
分数。
②执行存储过程stu_grade,查询0001学生的姓名、课程名称、分数。
③使用系统存储过程sp_rename将存储过程stu_grade更名为stu_g。
(4)使用Student表、course表、grade表。
①创建一个带参数的存储过程stu_g_p,当任意输入一个学生的姓名时,将从3个表中返回该学生的学号、选修的课程名称和课程成绩。
②执行存储过程stu_g_p,查询“张卫民”的学号、选修课程和课程成绩。
③使用系统存储过程sp_helptext,查看存储过程stu_g_p的文本信息。
(5)输入以下代码,复制Student表命名为stu2,为stu2表创建一个触发器stu_tr,当stu2表插入一条记录时,为该记录生成一个学号,该学号为学号列数据的最大值加1。
--复制Student表命名为stu2
SELECT * INTO stu2 FROM Student
GO
--为stu2表创建一个INSERT型触发器stu_tr
CREATE TRIGGER stu_tr
ON stu2 FOR INSERT
AS
DECLARE @max char(4)
SET @max=(SELECT MAX(no) FROM stu2)
SET @max=@max+1
UPDATE stu2 SET no=REPLICATE('0',4-len(@max))+@max
FROM stu2 INNER JOIN inserted on stu2.no=inserted.no
执行以上代码,查看studentsdb数据库中是否有stu2表,展开stu2,查看其触发器项中是否有stu_str触发器。
在查询编辑窗口输入以下代码:
INSERT INTO stu2(no,name,sex) V ALUES('0001','张主','女')
运行以上代码,查看stu2表的变化情况,为什么插入记录的学号值发生了改变?
(6)为grade表建立一个名为insert_g_tr 的INSERT触发器,当用户向grade表中插入记录时,如果插入的是在course表中没有的课程编号,则提示用户不能插入记录,否则提示记录插入成功。在进行插入测试时,分别输入以下数据:
学号课程编号分数
0004 0003 76
0005 0007 69
观察插入数据时的运行情况,说明为什么?
create trigger insert_g_tr
on grade for insert
as
begin
declare@sno varchar(50),@cno varchar(50),@grade int
select@cno=cno,@sno=sno,@grade=grade from inserted
if not exists(select*from course where no=@cno)
print'没有该课程编号,不能插入记录'
else
insert into sc values(@sno,@cno,@grade)
end
(7)为course表创建一个名为del_c_tr的DELETE触发器,该触发器的作用是禁止删除course表中的记录。
create trigger del_c_tr
on course instead of delete
as
begin
declare@cno varchar(50)
select@cno=no from deleted
if exists(select*from course where no=@cno)
print'grade表中有记录,不能删除记录'
else
delete from course where no=@cno
end
(8)为Student表创建一个名为update_s_tr的UPDATE触发器,该触发器的作用是禁止更新Student表中的“姓名”字段的内容。
create trigger update_s_tr
on student instead of update
as
begin
declare@oldsno varchar(50),@newsno varchar(50)
if update(no)
select@oldsno=no from deleted
select@newsno=no from inserted
if exists(select*from grade where sno=@oldsno)
print'禁止修改'
else
update student set no=@newsno where no=@oldsno
end