数据库存储过程练习附答案(优.选)

  • 格式:doc
  • 大小:20.50 KB
  • 文档页数:3

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

存储过程、触发器练习

1、在学生选课数据库中,创建一存储过程deptmale,查询指定系的男生人数,其中系为输入参数,人数为输出参数。

create proc p_dept

@dept char(20),@mannum int output

as

select @allcre=count(sno) from student

where sdept=@dept and ssex='男'

declare @num int

exec p_dept '计算机系',@num output

print @num

2、在s_c数据库中,创建一个存储过程totalcredit,根据输入的学生姓名,计算其总学分。(使用输出参数)。并执行该存储过程。

create proc p_cou

@name char(10),@allcre int output

as

select @allcre=sum(ccredit)from student,course,sc

where student.sno=sc.sno and o=o

and sname=@name group by sc.sno

declare @asum int

exec p_cou '刘晨',@asum output

print @asum

3、创建一更新触发器upd_grade,设置sc表的grade字段不能被更新,并显示信息“学生成绩不能被修改,请与教务处联系”。

CREATE TRIGGER mes_sc

ON sc

FOR UPDATE

AS

IF UPDATE(grade)

BEGIN

ROLLBACK TRAN

PRINT '学生成绩不能被修改,请与教务处联系'

END

4、创建一个insert触发器uninsertstu,当在student表中插入一条新纪录时,如果是“计算机系”的学生,则撤销该插入操作,并返回“此系人数已满,不能再添加”信息。

create trigger unisnertstu

on student for insert

as

if exists(select*from inserted where sdept='计算机系')

begin

print'此系人数已满,不能再添加'

rollback transaction

end

4、创建一删除触发器tri_xs,功能是当某个学生从student表中被删除时,同时也删除sc表中该学生的相关记录。

USE 学生选课

GO

CREATE TRIGGER tri_xs

ON student

FOR DELETE

AS

DELETE sc

WHERE sno IN (SELECT sno FROM DELETED)

GO

5、在学生选课数据库中,创建一学生联系方式表stu_info(id,sno,sname,address,phone)。其中id是自动编号。并向该表中插入一条记录(0611105,李雷,汉正街5号,1111111)。

6、在创建的stu_info表中,查找是否有‘王梅梅’同学,如果

没有,则在此表中添加该记录(0611108,王梅梅,人民路1号,22222222),编程实现将此信息添加到表中。

declare @id int

set IDENTITY_INSERT stu_info ON

if exists(select * from stu_info where sname='王梅梅')

begin

print '此人已存在.'

end

else

begin

select @id=max(id) from stu_info

set @id=@id+1

insert into stu_info(id,sno,sname,address,phone) values(@id,'0611108','王梅梅','人民路1号','22222222') end

最新文件---------------- 仅供参考--------------------已改成word文本--------------------- 方便更