存储过程实验

存储过程实验


测试实例

1.创建存储过程但是没有结果,也不抱错,检查变量的类型必须完全一致。
失败截图:
在这里插入图片描述

--创建存储过程s_info,根据学生的姓名和学号查询学生的年龄、所在系。
CREATE PROCEDURE s_info 
  @Sno char(9),   --如果类型不一致,那就会导致没有结果的输出 
  @Sname char(20)  
  AS
    print '--------------------------------------------------' 
    print '     根据学生的姓名和学号查询学生的年龄、所在系:'
    SELECT SDept,SName,SNo,
       datediff(yy,SB,getdate()) AS DiffDate   
       FROM  Student  WHERE SNo=@Sno and SName=@Sname
GO

select * from Student;
DROP PROC s_info;

EXEC s_info @Sno=s02,@Sname=李想  

成功截图:
在这里插入图片描述

2.创建存储过程s_default,根据学生的姓名和学号查询学生的年龄、所在系。
如果未提供学生的姓名和学号,该存储过程将显示学号为‘s01’,姓名为“王玲”的学生信息。


--创建存储过程s_default,根据学生的姓名和学号查询学生的年龄、所在系。
--如果未提供学生的姓名和学号,该存储过程将显示学号为‘s01’,姓名为“王玲”的学生信息。
CREATE PROCEDURE s_default
  @Sno char(9),    
  @Sname char(20)  
  AS
    print '--------------------------------------------------' 
    print '     根据学生的姓名和学号查询学生的年龄、所在系:'
    print '     如果未提供,显示学号s01,姓名 王玲 的学生'
    IF ( @Sno BETWEEN 's01' AND 's06')  -- 范围
       SELECT SDept,SName,SNo,
         datediff(yy,SB,getdate()) AS DiffDate   --年龄
        FROM  Student  WHERE SNo=@Sno and SName=@Sname

    ELSE
        SELECT SDept,SName,SNo,
        datediff(yy,SB,getdate()) AS DiffDate   
        FROM  Student where SNo='s01' and SName='王玲'
     
GO  

DROP PROC s_default;
EXEC s_default @Sno=s02,@Sname=李想  
EXEC s_default @Sno=s10,@Sname=李二  

在这里插入图片描述

3.创建存储过程s_nul,根据学生的姓名和学号查询学生选修的课程。
如果未提供生的姓名和学号,则显示提示信息“请输入学号和姓名!”。

CREATE PROCEDURE s_nul
  @Sno char(9),    
  @Sname char(20)  
  AS
    print '--------------------------------------------------' 
    print '     根据学生的姓名和学号查询学生选修的课程:'
    print '     如果未提供,显示提示信息“请输入学号和姓名!'
    IF ( @Sno = null or @Sname = null) 
       print '请输入学号和姓名!'
       
    ELSE
        SELECT SName,Course.CNo,CName as 课程
        FROM  Student,Course,SC 
        WHERE Student.SNo=@Sno   --将几个表连在一起
        and  Student.SNo = SC.SNo
        and SC.CNo=Course.CNo 
     
GO

drop proc s_nul;
EXEC s_nul @Sno=s02,@Sname=李想  
  
select * from Course;
select * from SC;

在这里插入图片描述

4创建存储过程s_count,根据课程名,检索选修某门课程的学生人数。

CREATE PROCEDURE s_count
  @Cname char(9)
  AS
    print '--------------------------------------------------' 
    print '     根据课程名,检索选修某门课程的学生人数:'
     --统计Sno的个数
        SELECT 课程名=CName, 学生选修人数=COUNT(distinct SNo) 
        FROM  SC,Course
        where SC.CNo= Course.CNo 
        AND Course.CName=@Cname
        group by CName
        order by CName
     
GO

drop proc s_count;
select * from Course;
select * from SC;
EXEC s_count @Cname='数据库'  

在这里插入图片描述

5.创建存储过程sg,根据输入的学号和课程号,获得指定学号和课程号的课程成绩。

CREATE PROCEDURE sg
        @SNo CHAR(9),
		@CNo CHAR(4)
  AS
     --创建存储过程sg,根据输入的学号和课程号
     --获得指定学号和课程号的课程成绩。
        SELECT 学号=SNo, 课程号=CNo,成绩=Grade 
        FROM  SC
        where  SC.CNo=@CNo 
        AND SC.SNo=@SNo
        group by SNo,CNo,Grade --分组就类似输出的样子元组
        order by SNo
     
GO

exec sg @SNo='s01',@CNo='c01'

在这里插入图片描述

6.创建存储过程update_s_1,修改指定学号的数据信息。

create proc update_s_1
        @SNo CHAR(9),
        @SName CHAR(20) ,
		@SDept CHAR(20),
		@SB datetime,
		@SSex CHAR(2)
as
begin

       update Student set SNo=@SNo,SName=@SName,SDept=@SDept,
       SB=@SB,SSex=@SSex
       where SNo=@SNo; 

end

 

exec update_s_1 @SNo='s01',@SName='莉莉',@SDept='计算机',
       @SB='2002-03-03 00:00:00.000',@SSex='女'

select * from Student;

在这里插入图片描述
修改后
在这里插入图片描述

总结

group by:分组显示的
存储过程的数据类型必须与建表的数据类型保持一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值