通过SQL命令创建和执⾏存储过程
步骤如下:
(1) 定义如下存储过程
USE 数据库名
GO
CREATE PROCEDURE 存储过程名
AS
SELECT student.sno,sname,courseo,cname,degree
FROM student,score,course
WHERE student.sno=score.sno AND scoreo=courseo
GO
(2) 调⽤存储过程
EXEC 存储过程名
GO
创建存储过程
语法格式:
CREATE PROC [ EDURE ] 存储过程名 [ ; number ]            /*定义存储过程名*/
[ { @参数名类型 }                                    /*定义参数的类型*/
[ VARYING ] [ = default ] [ OUTPUT ] ]                  /*定义参数的属性*/
[ ,...n ]
[ WITH  { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION }]
/*定义存储过程的处理⽅式*/
[ FOR REPLICATION ]
AS  sql_statements                    /*执⾏的操作*/
2) 存储过程的执⾏
通过EXEC命令可以执⾏⼀个已定义的存储过程。
语法格式:
[ EXEC [ UTE ] ]    [ @return_status = ]
{ 存储过程名 [ ;number ] | @procedure_name_var }
[ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] }
[ ,...n ]
例14.1  利⽤school数据库中的school表、score表和course表,编写⼀⽆参存储过程⽤于查询所有学⽣的选修课程成绩记录。
CREATE PROCEDURE a
AS
SELECT student.sno,sname,courseo,cname,degree
FROM student,score,course
WHERE student.sno=score.sno AND scoreo=courseo
执⾏:
EXEC a
例14.2  编写⼀存储过程,根据school数据库的student、score、course三个表查询指定学⽣的选修课程成绩情况。
CREATE PROCEDURE b @sno char(5)
AS
SELECT student.sno,sname,courseo,cname,degree
FROM student,score,course
WHERE student.sno=score.sno AND scoreo=courseo AND student.sno=@sno
执⾏:
EXEC b '101'
例14.3利⽤shool数据库中student表、score、course表创建⼀存储过程c,查询指定课程名的选修情况。该存储过程在参数中使⽤了模糊查询,如果没有提供参数,则使⽤预设的默认值。
CREATE PROCEDURE c
@cname varchar(16)='%计算机%'
AS
SELECT student.sno,sname,courseo,cname,degree
FROM student,score,course
WHERE student.sno=score.sno AND scoreo=courseo AND cname LIKE @cname
EXEC c
EXEC c '操作%'
EXEC c '%计%'
例14.4编写⼀存储过程,统计指定课程选修⼈数,存储过程中使⽤了输⼊和输出参数。
CREATE PROCEDURE m
@cname char(16),@num int output
AS
SELECT @num=COUNT(sno) FROM score,course
WHERE scoreo=courseo AND cname LIKE @cname
DECLARE @num int
EXEC m '操作系统',@num output
SELECT @num AS 借阅次数
sql存储过程实例例14.5  在school数据库的student表上声明并打开⼀个游标。
CREATE PROCEDURE student_cursor @student_cur CURSOR VARYING OUTPUT
AS
SET @student_cur=CURSOR FORWARD_ONLY STATIC FOR
SELECT sno,sname,ssex,class  FROM student
OPEN @student_cur
DECLARE @mycursor CURSOR
EXEC student_cursor @student_cur=@mycursor OUTPUT
FETCH NEXT FROM @mycursor
WHILE @@FETCH_STATUS=0
FETCH NEXT FROM @mycursor
CLOSE @mycursor
DEALLOCATE @mycursor
例14.6 创建加密过程,使⽤sp_helptext系统存储过程获取关于加密的存储过程的信息。
CREATE PROCEDURE encryption_this WITH ENCRYPTION
AS
SELECT * FROM student
EXEC sp_helptext 'encryption_this'
例14.7  创建存储过程sp_showtable,显⽰以student开头的所有表名及其对应的索引名。如果没有指定参数,该存储过程将返回以course 开头的所有表名及对应的索引名。
CREATE PROCEDURE sp_showtable @table varchar(20)='course%'
AS
SELECT sysobjects.name,sysindexes.name
FROM  sysobjects,sysindexes
WHERE sysobjects.id=sysindexes.id
AND sysobjects.name LIKE @table AND indid<>0 AND indid<>255
EXEC sp_showtable
EXEC sp_showtable 'student%'
如果确认⼀个数据库的某个存储过程与其它对象没有任何依赖关系,则可⽤DROP PROCEDURE语句永久地删除该存储过程。
语法格式:
DROP PROCEDURE { procedure } [ ,...n ]
功能:从当前数据库中删除⼀个或多个存储过程或存储过程组。
参数含义:
procedure指要删除的存储过程或存储过程组的名称;n:表⽰可以指定多个存储过程同时删除。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。