时间:2021-07-01 10:21:17 帮助过:11人阅读
说出来有点丢人,做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 @@error<>0
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