sql 存储过程

存储过程(procedure)类似于C语言中的函数

用来执行管理任务或应用复杂的业务规则

存储过程可以带参数,也可以返回结果

存储过程的优点

执行速度更快

允许模块化程序设计

提高系统安全性

减少网络流通量

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

存储过程例子 输入参数

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

EXEC proc_stu 60,55

--或这样调用:

EXEC proc_stu @labPass=55,@writtenPass=60

 

EXECUTE(执行)语句用来调用存储过程 调用的语法

EXEC 过程名 [参数]

存储过程的参数分两种:

输入参数 输出参数

输入参数: 用于向存储过程传入值,类似C语言的按值传递;

输出参数: 用于在调用存储过程后, 返回结果,类似C语言的 按引用传递;

例子输出参数

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

调用输出参数

/*---调用存储过程----*/
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

修改存储过程

ALTER PROCEDURE proc_stu …

删除存储过程

DROP PROCEDURE proc_stu

原文地址:https://www.cnblogs.com/youchim/p/5563678.html