说出来有点丢人,做sqlserver应用系统近一年,竟然没有使用过存储过程,现在就好好的梳理一下对应知识,慢慢让其加入到我的项目中去吧。 存储过程的优点:1、运行效率高,提供了在服务器端快速执行sql语句的有效途径。2、存储过程降低了客户机和服务器之间的
说出来有点丢人,做sqlserver应用系统近一年,竟然没有使用过存储过程,现在就好好的梳理一下对应知识,慢慢让其加入到我的项目中去吧。
存储过程的优点:1、运行效率高,提供了在服务器端快速执行sql语句的有效途径。2、存储过程降低了客户机和服务器之间的通信量。3、方便实施企业规则。
(1)创建存储过程
①创建一个存储过程,查看00005号课程的选修情况,包括选修该课程学生的学号、姓名和成绩。
解答:
use sm(数据库名称)
go
create procedure ssc_3
as
select student.sno,sname,score
from student left join sc on student.sno=sc.sno
where sc.sno='00005'
go
按f5键,创建成功
②执行存储过程:execute ssc_3
(2)使用输入参数
①上面建立的存储过程只能对00005号课程的选修情况进行查看,要想对所有课程进行随机查看,需要进行参数的传递
use sm
go
create procedure ssc_4
@cnumber char(5)
as
select student.sno,sname,score
from student left join sc on student.sno=sc.sno
where sc.sno=@cnumber
go
②按位置传递参数
execute ssc_4 '00008'
③通过参数名传递参数
execute ssc_4
@cnumber='00008'
(3)使用默认参数值
①执行存储过程ssc_4时,如果没有给出参数,系统会报错。如果希望不给参数时,能查询所有课程的选修情况,则可以使用默认参数来实现
use sm
go
create procedure ssc_5
@cnumber char(5) =null
as
if @cnumber is null
begin
select student.sno,sname,score
from stuent join sc on student.sno=sc.sno
end
else
begin
select student.sno,sname,score from student join sc on student.sno=sc.sno
where sc.sno=@cnumber
end
go
②执行下面两条语句,比较执行结果。
execute ssc_5
execute ssc_5 '00005'
(4)使用输出参数
①创建一个存储过程ssc_6,获得选修某门课程的总人数
use sm
go
create procedure ssc_6
@cnumber char(5),@ccount int output
as
select @ccount=count(*) from sc where sc.cno=@cnumber
go
@执行存储过程ssc_6
declare @ccount int
execute ssc_6 '00008',@ccount output
select 'the result is',@ccount
(5)使用返回值
①创建一个返回执行状态码的存储过程ssc_7,它接受课程号为输入参数,如果执行成功,返回0;如果没有给出课程号,返回错误码1;如果给出的课程号不存在,返回错误码2;如果出现其他错误,返回错误码3.
use sm
go
create procedure ssc_7
@cnumber char(5) = null
as
if @cnumber is null
begin
print 'error:you must specify a course number.'
return(1)
end
else
begin
if(select count(*) from sc where cno=@cumber)=0
begin
print 'error:you must specify a valid course number'
return(2)
end
end
select @cnumber as cno from sc where cno=@cnumber
if @@error0
begin
return(3)
end
else
return(0)
go
执行存储过程ssc_7
declare @result int
exec @result ==ssc_7
select 'the result is',@result
(6)修改存储过程(sqlserver 2008下)
在数据库根目录下,打开可编程选项下得存储过程选项,选择要修改的存储过程,右击鼠标,在弹出的对话框中选择修改即可
(7)查看存储过程。
执行以下语句,查看存储过程ssc_3 的信息。
exec sp_help ssc_3
(8)删除存储过程
执行以下语句,删除存储过程ssc_3
drop procedure ssc_3