• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
成为自己最想成为的那种人
博客园    首页    新随笔    联系   管理    订阅  订阅
数据库 - 存储过程

概述:

  首先,需要了解存储过程的的常见类型  ——  从参数的角度分为有参数的存储过程和无参数的存储类型,从返回结果的角度分为“返回结果集”、“使用 output 参数”、“通过 return 参数”。

  语法:

   Create proc procedure_name  
   [ { @parameter data_type } [ varying ] [ = default ] [ OUTPUT ]     ] [ ,...n ]           [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]  [ FOR REPLICATION ]      AS 
   sql_statement [ ...n ]

创建无参数的存储过程

    create proc StuProc
    as              //此处 as 不可以省略
    begin           //begin 和 end 是一对,不可以只写其中一个,但可以都不写
      select S#,Sname,Sage,Ssex from student
    end
    go

创建有参数的存储过程

  全局变量

     全局变量也称为外部变量,它的作用域为从变量定义处开始,到本程序文件的末尾。

   选出指定姓名的学生信息:

    create proc StuProc
    @sname varchar(100) 
    as 
    begin
      select S#,Sname,Sage,Ssex from student where sname=@sname
    end
    go

    exec StuProc '赵雷'     //执行语句

    上面是在外部给变量赋值,也可以在内部直接给变量设置默认值

      create proc StuProc
      @sname varchar(100)='赵雷'
      as 
      begin
        select S#,Sname,Sage,Ssex from student where sname=@sname
      end
      go

      exec StuProc

   也可以把变量的内容输出,使用 output

    create proc StuProc
    @sname varchar(100),
    @IsRight int output //传出参数
    as 
    if exists (select S#,Sname,Sage,Ssex from student where sname=@sname)
      set @IsRight =1
    else
      set @IsRight=0
    go

    declare @IsRight int 
    exec StuProc '赵雷' , @IsRight output
    select @IsRight

  以上是全局变量,下面来了解局部变量

    局部变量也称为内部变量,局部变量必须先用 declare 命令定义后才可以使用。 其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。

    局部变量的定义:  declare {@变量名  数据类型}

    局部变量的赋值方法:  set {@变量名=表达式} 或者 select {@变量名=表达式}

    局部变量的显示:  select  @变量名

  (使用局部变量查询指定姓名的学生信息)

    create proc StuProc
    as 
    declare @sname varchar(100)
    set @sname='赵雷'
    select S#,Sname,Sage,Ssex from student where sname=@sname
    go

    exec StuProc

  返回局部变量的数据(将局部变量的数据显示出来)

    create proc StuProc
    as 
    declare @sname varchar(100)
    set @sname=(select Sname from student where S#=01)
    select @sname
    go

    exec StuProc

从存储过程返回结果有三种形式:

  返回结果集(一列或多列,单行或多行,通过 select 子句)

  使用 output 参数

  通过 return 参数

    参数的传递

      ① 输入参数: 允许调用方将数据值传递到存储过程

      ② 输出参数: 允许存储过程或游标变量传递回调用方

      每个存储过程都会向调用方返回一个整数返回代码,如果存储过程没有显式设置返回代码的值,则返回代码为0

 

调用存储过程——输出参数

    返回结果集:

        AS

        select  au_lname  from  authors

        GO

      或:

        AS

        declare  @au_lname(20)

        select  @au_lname = au_lname  from  authors  where  AU_ID = '172-32-1176'

        GO        //结果集多个的,变量值为最后一个

    使用 output 参数:

        必须在 create proc 语句最后指定关键字 output ,否则回产生一个错误(text 类型数据不能作为 output 参数输出)

    用 return 语句返回值: (返回值为整数)

      

    或:

 

posted on 2018-03-17 11:14  遇见未来  阅读(413)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3