在SQL中,存储过程类似于编程语言的函数,即当创建一个存储过程之后便可以在接下来任何类似的操作是直接调用存储过程
那么我们创建存储过程的优势是什么呢:
1.提高性能:存储过程将SQL语句封装在一起,降低了数据传输的成本,减少执行时间。
2.提高安全性:通过存储过程,可以访问数据的特定接口,从而控制对数据库的访问
3.简化复杂操作:计算、逻辑和业务规划等重复性较高的动作时,使用存储结构可以保障数据的一致性、完整性、可靠性。
下面介绍存储过程的创建以及使用步骤
(1)无参传递:即主程序不需要参数传递进去就能执行
create procedure 存储过程名称 as 操作命令
以创建一个查询学生成绩平均分的存储过程为例
create procedure pjf as
select 成绩表.学号,姓名,avg(成绩) as 平均分 from
成绩表 join 学生表 on 学生表.学号=成绩表.学号 group by 成绩表.学号,姓名
此时就创建好了一个名为“pjf”的存储过程,此时只要我们选择运行该存储过程就可以得到关于学生平均分的一个表格。
下面展示无参传递时使用存储过程的代码
execute pjf
(2)有参传递:通过输入参数使存储过程输出不同结果(实用性,灵活性更强)
create procedure 存储过程名称 @参数名称 参数数据类型
as 操作命令(其中操作命令需要使用参数传入使输出结果改变)
下面列举通过学生性别和姓名查询学生表当中学生信息的存储过程的建立
create procedure xbxm @xb char(2),@xm nchar(6) as
select*from 学生表 where 性别=@xb and left(姓名,1)=@xm
其中需要注意的是:在SQLserver中定义参数时要求参数名以@为起始并且具有唯一性
当我们完成有参存储过程的建立之后在使用它时,我们需要在使用的时候将该存储过程需要的参数输入完成查询,例如
execute xbxm '女','李'
查询结果展示
(3)有参传递并且将形参或者实参返回
create procedure 存储过程名称 @参数名称1 参数数据类型,@参数名称2 参数数据类型 output as 操作命令
此处需要注意,只有需要返回的参数才跟一个output,正常输入且不需要返回的参数不用跟
下面举例输入学生学号和课程名称返回该学生的课程成绩
create procedure 输出成绩 @xh nchar(6),@kch nchar(6),@cj int output as
select @cj=成绩 from 学生成绩课程表 where 学号=@xh and 课程号=@kch
注意!!!:一定是需要返回的参数才跟output
此时使用有返回值的参数的存储过程的代码为
declare @cj int
execute 输出成绩 '001','D001',@cj output
print @cj
使用该存储过程时的注意事项为:
需要提前定义返回参数,并且在execute语句后面在返回参数之后添加output
使用print打印返回的参数值