SQL存储过程试题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--写存储过程及调用存储过程
/*1.写出创建分数存储过程用于计算某门课程成绩最高分、最低分、
平均分,参数课程号。*/
--2.写出统计某门课选人数的存储过程,输入参数课程号,输出参数人数。
/*3.创建存储过程,要求根据学生姓名查看学生的籍贯.
(要求:在存储过程里定义两个参数,
第一个接收由调用程序指定的输入值(学生姓名),
第二个参数用于将该值返回调用程序)*/
字段名称数据类型说明
ID int 自动编号,主键
PName Char(10) 程序员姓名
Wage int 工资
十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱?
例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:
请编写T-SQL来实现如下功能:
查询是否有一半程序员的工资在2200、3000、3500、4000、5000或6000元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到2200,3000,3500,4000,5000或6000元。
/*5.编写一个存储过程PR_GET_PASS_RA TE统计某门课程的及格率,其传入参数是课程号P_CNO,传出参数是该课程成绩的及格率P_PASSRATE,及格率的格式形如:86.56%。
6.创建触发器T_1,功能是当向数据表学生添加记录时,显示学生的信息。
create trigger T_1 on 学生
after insert
as select * from 学生
insert into 学生values('3001','李四','男','计本10')
7.创建触发器T_2,功能是当向数据表班级添加、修改和删除记录时,显示学生的信息。create trigger T_2 on 学生
after insert,update,delete
as select * from 学生
8.创建触发器T_3,功能是当修改班级班号,同步更新学生表的班号。
9.创建触发器T_4,功能是当删除学生表的记录时,同步删除选课表中的选课信息。
create trigger T_4 on 学生
after delete
as
declare @xh char(10)
select @xh=学号from deleted
delete from 选课where 学号=@xh
delete from 学生where 学号='3002'
/*1.写出创建分数存储过程用于计算某门课程成绩最高分、最低分、
平均分,参数课程号。*/
use xsgl
go
create procedure aa(@课程名nchar(16))
as
begin
select 课程号,最高分=max(成绩),最低分=min(成绩),平均分=avg(成绩) from 成绩where 课程号= @课程名
group by 课程号
end
go
execute aa '001'
--2.写出统计某门课选人数的存储过程,输入参数课程号,输出参数人数。
use xsgl
go
create procedure bb @课程号char(10),@人数int output
as
begin
select @人数=(select count(课程号)from 成绩
where 课程号=@课程号)
end
declare @人数int,@课程号char(4)
set @课程号='002'
exec bb @课程号,@人数output
print '课程号为'+@课程号+'的人数:'+cast(@人数as char(2))
/*3.创建存储过程,要求根据学生姓名查看学生的籍贯.
(要求:在存储过程里定义两个参数,
第一个接收由调用程序指定的输入值(学生姓名),
第二个参数用于将该值返回调用程序)*/
use xsgl
go
create procedure cc(@姓名char(10),@籍贯char(10) output) as
begin
select @籍贯=(select 籍贯from 学生
where 姓名=@姓名)
end
declare @姓名char(10),@籍贯char(10)
set @姓名='廖小小'
exec cc @姓名,@籍贯output
print '学生'+@姓名+'的籍贯是:'+@籍贯
USE Wage
GO
CREATE TABLE ProWage --程序员工资表
(
ID int identity(1,1) primary key, --工资编号
PName CHAR(10) NOT NULL , --程序员姓名Wage int NOT NULL --工资
)
GO
--1、创建存储过程--
if exists (select * from sysobjects where name='Sum_wage') drop procedure Sum_wage
GO
create procedure Sum_wage
@PWage int,