1. 存储过程的定义
存储过程是一系列预先编辑好的、能实现特定数据操作功能的SQL 代码集,它与特定的数据库相关联,存储在SQL Server服务器上。用户可以像使用自定义的函数一样重复调用这些存储过程,实现它所定义的操作。
2. 存储过程的类型
存储过程分为3类:系统存储过程、用户自定义存储过程和扩展存储过程。
(1)系统存储过程主要存储在 master 数据库中并以 sp_ 为前缀。
(2)用户自定义存储过程是由用户创建并能完成某一特定功能(如查询用户所需数据信息)的存储过程,是封装了可重用代码的 SQL 语句模块。
(3)扩展存储过程允许使用高级编程语言(例如C 语言)创建应用程序的外部例程而使SQL Server 的实例可以动态地加载和运行 DLL。
3. 创建存储过程的步骤
一般来说,创建一个存储过程应按照以下步骤进行:
(1)编写SQL 语句。
(2)测试 SQL 语句是否正确,并能实现功能要求。
(3)若得到的结果数据符合预期要求,则按照存储过程的语法,创建该存储过程。
(4)执行该存储过程,验证其正确性。
4. 使用 SQL 语句创建存储过程
创建存储过程的语法格式:
CREATE PROC [ EDURE ] procedure_name [ ;number ]
[ @parameter data_type [= default ],…]
AS sql_statement
说明:
·procedure_name:给出存储过程名。
·Number:为可选的整数,对同名的存储过程指定一个序号。
·@parameter: 为存储过程的形参,@符号作为第一个字符来指定参数名。
·data_type:指出参数的数据类型。
·=default:给出参数的默认值。
·sql_statement: 存储过程所要执行的 SQL 语句,它可以是一组 SQL 语句,可以包含流程控制语句等。
5. 创建、修改、调用、删除存储过程示例
在“学生管理”数据库中有“学生”表、“课程”表、“成绩”表结构如图1-20所示。
1)创建存储过程
如果要通过SQL 语句创建一个存储过程,存储过程名为 student_grade, 要求现实如下功能:查询“学生管理”数据库中每个学生各门功课的成绩,其中包括每个学生的学号、姓名、课程名、分数,创建该存储过程的语句如下:
CREATE PROCEDURE student_grade
AS
SELECT 学号,姓名,课程名,分数
FROM 学生,课程,成绩
WHERE 学生.学号=成绩.学号 AND 成绩.课程号=课程.课程号
GO
2)修改存储过程
存储过程 student_grade 已创建,根据要求对它进行修改,只要使用 ALTER PROCEDURE 语句即可实现。
修改存储过程 student_grade,, 实现查询“学生管理”数据库中计算机系学生各门功课的成绩,其中包括每个学生的学号、姓名、课程名、学分、分数。
ALTER PROCEDURE student_grade
AS
SELECT 学号,姓名,课程名,学分,分数
FROM 学生,课程,成绩
WHERE 学生.学号=成绩.学号 AND 成绩.课程号=课程.课程号
AND学生.所在院系='计算机系'
GO
3)调用存储过程
EXEC student_grade
GO
4)删除存储过程
无用的存储过程可用 DROP 语句将其删除。
DROP PROCEDURE student_grade
GO