存储过程(详解)

存储过程的概念
存储过程(Stored Procedure)是一组编译好存储在服务器上的完成特定功能T-SQL代码,是某数据库的对象。客户端应用程序可以通过指定存储过程的名字并给出参数(如果有参数)来执行存储过程。存储过程是一组为了完成特定功能的SQL语句集。可以接受参数、输出参数、返回单个或多个结果集。

存储过程的优点
(1)允许标准组件式编程,增强重用性和共享性
(2)能够实现较快的执行速度
(3)能够减少网络流量
(4)可被作为一种安全机制来充分利用

存储过程的分类
存储过程可分为三类:系统提供的存储过程、用户自定义存储过程和扩展存储过程
系统:系统提供的存储过程,sp_*
扩展:SQL Server环境之外的动态链接库DLL,xp_
远程:远程服务器上的存储过程
用户:创建在用户数据库中的存储过程
临时:属于用户存储过程,#开头(局部:一个用户会话),##(全局:所有用户会话)

创建用户存储过程
在【对象资源管理器】窗口中,展开“数据库”节点,再展开所选择的具体数据库节点,再展开选择“可编程性”节点,右击“存储过程”,选择“新建存储过程”命令。在右侧查询编辑器中出现存储过程的模板,用户可以在此基础上编辑存储过程,单击“执行”按钮,创建该存储过程。
说明:查看模版的各项的意义选择菜单:查询-> 指定模板参数的值

SQL语句创建存储过程
格式:
CREATE PROC 过程名
@形参名 类型
@变参名 类型 OUTPUT
AS SQL语句
说明:OUTPUT表示该参数是一个返回参数。参数之间用逗号隔开

创建一个多表查询的存储过程
USE educ
GO
CREATE PROCEDURE proc_sc
AS
SELECT x.sid,x.sname,y.cid,y.grade
FROM student x INNER JOIN sc y
ON x.sid=y.sid
WHERE x.sid=‘bj10001’

利用输出参数计算阶乘
USE educ
IF EXISTS(SELECT name FROM sysobjects
WHERE name=‘factorial’ AND type=‘P’) --名称是factorial 类型是procedure
DROP PROCEDURE factorial
GO
CREATE PROCEDURE factorial
@in float , --输入形式参数
@out float OUTPUT --输出形式参数
AS
DECLARE @i int
DECLARE @s float
SET @i=1
SET @s=1
WHILE @i<=@in
BEGIN
SET @s=@s*@i
SET @i=@i+1
END
SET @out=@s --给输出参数赋值
说明:该脚本是先在系统表sysobjects中判断有没有factorial存储过程,如果有则删除,然后在重新建一个factorial过程

调用存储过程
DECLARE @ou float
EXEC factorial 5,@ou out --实参表
PRINT @ou

执行存储过程
lookstudent 或EXEC lookstudent
详细语法格式:
[EXECUTE]
[<返回值变量> =]
{过程名[;number] | <@过程名变量>}
[[@参数=]{值 | @变量 [OUTPUT] | [DEFAULT]][,n….]}]
说明:
<返回值变量>:是可选的整型变量。用来保存存储过程向调用者返回的值
<@过程名变量>:是一变量名。用来代表存储过程的名字

注意:如果@参数是输出参数,则其后要加OUTPUT

管理存储过程

  • 使用sp_helptext命令查看创建存储过程的文本信息
  • 使用sp_help查看存储过程一般信息
  • 使用sp_rename对存储过程改名

语法:
use educ
Go
Sp_helptext proc_sc
注意 :如果定义该存储过程时,使用了with encryption参数,则使用sp_helptext无法看到其信息

删除存储过程
语法:
Drop procedure 过程名
SSMS方式删除:右键点击该存储过程,删除

修改存储过程
语法:
Alter procedure 过程名
As
SQL 语句

确定存储过程的执行状态
T-SQL允许设置存储过程的返回值,从而确定存储过程的执行状态。
说明:SQL Server预定义0表示成功返回,预留-1~-99为不同原因的失败

本文链接:https://my.lmcjl.com/post/12524.html

展开阅读全文

4 评论

留下您的评论.