1、SQL Server 存储过程和触发器操作实训一、由已给数据库文件完成下列 SQL 存储过程操作1、创建和执行不带参数的存储过程创建一个存储过程 p1,返回所有女生信息。2、创建和执行带参数的存储过程(1)创建一个存储过程 p2,返回指定系部的学生信息。 (输入参数)(2)创建从 sc 表查询指定学生学号的总成绩的存储过程 p3。 (输入和输出参数)(3)创建一个名为 Query_student 的存储过程,该存储过程的功能是根据学号查询学生表中某一学生的姓名、系别、性别及年龄。 (输入参数)执行存储过程 Query_student,查询学号为”9512103”的学生的姓名、系别、性别及年龄。
2、写出完成此功能的 SQL 命令。3、创建和执行带输入参数的存储过程(1)创建一个能向学生表中插入一条记录的存储过程 Insert_student,该过程需要 5 个参数,分别用来传递学号、姓名、性别、年龄、系别 5 个值。写出执行存储过程 Insert_student 的 SQL 语句,向学生表中插入一个新同学,并提供相应的实参值(实参值自定) 。create procedure Insert_student( no char(10),name char(8),sex char(2),age int, dept char(10) )ASbegininsert into s(sno,sname,
3、ssex,sage,sdept)values(no,name,sex,age,dept)endEXEC Insert_student no=9512104, name=徐小花,sex=女, age=20, dept=计算机系(2)在课程表中添加 “学分 ”列,类型为小整型,然后创建一个向课程表中插入一门新课程的存储过程 Insert_course,该存储过程需要三个参数,分别用来传递课程号、课程名、学分,但允许参数“学分”的默认值为 2,即当执行存储过程 Insert_course 时,未给参数“学分”提供实参值时,存储过程将按默认值 2 进行运算。执行存储过程 Insert_course,向
4、课程表 Course 中插入一门新课程。分两种情况写出相应的 SQL 命令:第一种情况:提供三个实参值执行存储过程 Insert_course第二种情况:只提供二个实参值执行存储过程 Insert_course,即:不提供与参数“学分”对应的实参值。4、利用企业管理器创建一个存储过程 p4,返回所有学生信息。1)进入企业管理器,分别展开“服务器” , “数据库” 。2)右击【存储过程】【新建存储过程】 ,在弹出如图所示的对话框。3) 在对话框中,直接输入下面的语句:CREATE PROCEDURE p4AS SELECT * FROM s4)单击“语法检查”按钮,检查语法错误。5)单击“确定”
5、按钮完成存储过程的创建。5、修改存储过程 p1,返回选修c02课程的女生信息。Alter proc p1AsSelect s.sno , sname , cno , gradeFrom s join sc on s.sno=sc.snoWhere ssex= 女 and cno=c2二、由已给数据库文件完成下列 SQL 触发器操作1、创建一个当学生表中插入一个新同学信息时能自动列出全部同学学生信息的触发器 Display_trigger【参考代码】create trigger Display_trigger on 学生for insertASSelect * from 学生2、调用实验一( 3
6、)创建的存储过程 Insert_student,向学生表中插入一新同学,看触发器 Display_trigger 是否被执行。【参考代码】EXEC Insert_student stuno=200602011, name=张丽丽,sex=女, class=3, birthday=1988-2-15三、练习和管理触发器。(1)建立数据库 testdb,并在数据库中建立两个表:Txl(ID int, Name char(10), Age int)Person_counts(Person_count int)(2)使用 T-SQL 编写一个触发器 tr_person_ins,每当 txl 表中插入一
7、行数据时,表 Person_ counts 中对应的数量也相应地发生变化。【参考代码】create trigger tr_person_inson txlfor insertAS -必须将字段 Person_count 的初始值输入 0UPDATE Person_counts SET Person_count=Person_count+1Select * from Person_counts测试触发器:insert txl values(1,AAA,15)(3)使用企业管理器创建一个触发器 tr_person_del,每当 txl 表中删除记录时,表 Person_ counts 中对应的数量
8、也相应地发生变化。【参考代码】create trigger tr_person_delon txlfor deleteASDECLARE n intSELECT n=COUNT(*) FROM deleted -统计 txl 表中删除的记录数UPDATE Person_counts SET Person_count=Person_count-nSelect * from Person_counts 测试触发器:delete from txl where Name=DDDDDD(4)使用企业管理器查看触发器 tr_person_del 的内容,并将该触发器的内容加密。解:右击表 txl,选择所有任务下级子菜单中的管理触发器 ,在弹出的对话框中可以创建和修改触发器的定义。