数据库存储过程如何创建
1、存储过程的优点
执行速度更快
允许模块化程序设计
提高系统安全性
减少网络流通量

2、--定义存储过程的语法
CREATE PROC[EDURE] 存储过程名
@参数1 数据类型 = 默认值 OUTPUT,
…… ,
@参数n 数据类型 = 默认值 OUTPUT
AS
SQL语句
GO

3、--创建存储过程的例子
CREATE PROCEDURE proc_stu
AS
DECLARE @writtenAvg float,@labAvg numeric(6,2)--定义变量
SELECT @writtenAvg=AVG(written),
@labAvg=AVG(lab) FROM Exam
print '笔试平均分:'+convert(varchar(6),@writtenAvg)
print '机试平均分:'+convert(varchar(6),@labAvg)
IF (@writtenAvg>70 AND @labAvg>70)
print '本校考试成绩:优秀'
ELSE
print '本校考试成绩:较差'
print '--------------------------------------------------'
print ' 参加本次考试没有通过的学员:'
SELECT stuName,stuInfo.stuNo,written,lab
FROM stuInfo INNER JOIN exam ON
stuInfo.stuNo=exam.stuNo
WHERE written<60 OR lab<60
GO

4、--调用存储过程
EXEC proc_stu 60,55
--或这样调用:
EXEC proc_stu @labPass=55,@writtenPass=60

5、EXECUTE(执行)语句用来调用存储过程 调用的语法
EXEC 过程名 [参数]
存储过程的参数分两种:
输入参数 输出参数
输入参数: 用于向存储过程传入值,类似C语言的按值传递;
输出参数: 用于在调用存储过程后, 返回结果,类似C语言的 按引用传递;
6、--例子输出参数
CREATE PROCEDURE proc_stu
@notpassSum int OUTPUT,
@writtenPass int=60,
@labPass int=60
AS
print '--------------------------------------------------'
print ' 参加本次考试没有通过的学员:'
SELECT stuName,stuInfo.stuNo,written,lab
FROM stuInfo INNER JOIN Exam
ON stuInfo.stuNo=exam.stuNo
WHERE written<@writtenPass
OR lab<@labPass
SELECT @notpassSum=COUNT(stuNo)
FROM Exam
WHERE written<@writtenPass
OR lab<@labPass
GO

7、/*---调用存储过程----*/
DECLARE @sum int
EXEC proc_stu @sum OUTPUT ,64
print '--------------------------------------------------'
IF @sum>=3
print '未通过人数:'+convert(varchar(5),@sum)+ '人,
超过%,及格分数线还应下调'
ELSE
print '未通过人数:'+convert(varchar(5),@sum)+ '人,
已控制在%以下,及格分数线适中'
GO

8、修改存储过程
ALTER PROCEDURE proc_stu …
删除存储过程
DROP PROCEDURE proc_stu