§8.存储过程及触发器
.存储过程
1.创建存储过程
--本地临时存储过程(只有创建它的用户可以访问)名前要有一个字符#,全局临时存储过程(任何用户都可以访问它)##开头.
create procedure 过程名 (参数列表)
       as
       SQL语句
       return         --过程结束使用return语句是编程的好习惯2.修改存储过程
alter procedure
       as
       SQL语句
       return
3.执行存储过程
       1)如果仅仅运行存储过程的话,可直接在查询窗口中输入过程名执行
       2)如果在批处理中执行,则需要用execute语句
execute 过程名 参数,参数...
4.删除过程
drop procedure 过程名
.存储过程参数举例
1.输入参数
create procedure my_procs (@sex char(2))--使用一个参数
       as
              select 学号,姓名,年龄,所在院系
                     from 学生表
                     where 性别 = @sex
       return
my_procs ''--执行时带上参数,不然出错
2.输出参数
--参数要带括号,并且用逗号分隔,要输出的参数要带上output 关键字
create procedure my_procname (@name char(8) = null,
                     @age tinyint output)
       as
       if @name = null
       begin
              print '查找哪位同学的年龄?'
                     return
       end
       select @age = 年龄
              from 学生表
              where 姓名 = @name
       return
declare @sage tinyint //定义变量
--这里要用关键字output 返回输出参数的值,使之把值传给@sage
execute my_procname '肖一竹',@sage output
select @sage 肖一竹的年龄
3.参数的顺序问题
create procedure max_int (@a int,@b int,@c int,@max int output)
       as
       if (@a >= @b) and (@a >= @c)
              select @max = @a
       else
              if (@b >= @a) and (@b >= @c)
                     select @max = @b
              else
                     select @max = @c
       return
declare @max_number int
--这里参数可以指定是过程中的参数,顺序可以颠倒,输出要带output参数
execute max_int @b = 5,@c = 10,@max = @max_number output,@a = 1
select @max_number
:不能在同一批处理中既删除又重建某个存储过程.因为在执行之前,SQLServer将分析整个批处理没有错误才执行.(P259)