zoukankan      html  css  js  c++  java
  • Sql server数据库设计 4

                   第四章(存储过程)

    存储过程的概念
          一、什么是存储过程
            1、存储过程(procedure)类似于C语言中的函数
            2、用来执行管理任务或应用复杂的业务规则
            3、存储过程可以带参数,也可以返回结果
            4、存储过程可以包含数据操纵语句、变量、逻辑 控制语句等
         二、存储过程的分类
            1、系统存储过程
               由系统定义,存放在master数据库中
               类似C语言中的系统函数
               系统存储过程的名称都以“sp_”开头或”xp_”开头
            2、用户自定义存储过程
               由用户在自己的数据库中创建的存储过程
               类似C语言中的用户自定义函数
          三、存储过程的优点

           1、执行速度更快
             2、允许模块化程序设计
             3、提高系统安全性
           4、减少网络流通量

    系统存储过程

        一、常用的扩展存储过程:xp_cmdshell

          可以执行DOS命令下的一些的操作
          以文本行方式返回任何输出
       二、调用语法:
          EXEC xp_cmdshell DOS命令 [NO_OUTPUT]

       三、系统常用存储过程

              系统存储过程                     说明
              sp_databases                列出服务器上的所有数据库。
              sp_helpdb                   报告有关指定数据库或所有数据库的信息
              sp_renamedb                更改数据库的名称
              sp_tables                  返回当前环境下可查询的对象的列表
              sp_columns                 回某个表列的信息
              sp_help                   查看某个表的所有信息
              sp_helpconstraint              查看某个表的约束
              sp_helpindex                 查看某个表的索引
              sp_stored_procedures             列出当前环境中的所有存储过程。
              sp_password                 添加或修改登录帐户的密码。
              sp_helptext                 显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。

    用户自定义存储过程

       一、创建不带参数的存储过程

          1、定义存储过程的语法
              和C语言的函数一样,参数可选
              参数分为输入参数、输出参数
              输入参数允许有默认值

              create  procedure  存储过程名 
                                  as

                begin
                          SQL语句

                end
               go

        eg:--创建不带参数的存储过程
            create procedure proc_getpc
            --没有参数
            as

            begin
              select pcid as '电脑编号','使用状态'=case      

                  when pcuse=0 then '空闲'     

                  when pcuse=1 then '使用'     

                  end,
               pcnote as '备注'
              from pcinfo where pcuse=0

          end
          go

          EXECUTE(执行)语句用来调用存储过程。
      ·      调用的语法如下:     

              EXEC  过程名  [参数]

              EXEC proc_getpc

        二、创建带输入参数的存储过程

            1、语法:

                CREATE  PROC[EDURE]  存储过程名 
                            @参数1  数据类型 = 默认值,
                                …… ,
                           @参数n  数据类型 = 默认值 
                        AS

                begin
                          SQL语句

                end          
                GO

           2、为输入参数指定默认值

                eg:@参数1 int=0,@参数2  varchar(10)="  "

           3、调用存储过程

                A:execute  存储过程名  default

                B:execute  存储过程名 @参数=default

           注意:是否指定默认值,指定什么样的默认值需要根据存储过程实现的功能来决定。

        三、创建带输出参数的存储过程

              1、语法:

                CREATE  PROC[EDURE]  存储过程名 
                            @参数1  数据类型 = 默认值,
                                …… ,
                           @参数n  数据类型  output
                        AS

                begin
                          SQL语句

                end          
                GO

            2、调用存储过程

                declare @参数 int --定义变量,用于存放调用存储过程是返回的结果
                exec proc_getbalance 4,@balance output

        四、return的使用

              1、return关键字可以终止存储过程或者返回数值(返回int类型)

                eg:

                  --创建存储过程,用户新增电脑,并使用return返回新增电脑的编号
                  create procedure proc_addpc
                    @pcnode varchar(20)
                  as        

                  begin
                     --插入数据,默认使用状态为空闲 
                     insert into pcinfo values(0,@pcnode)
                     --返回当前自动增长列的值
                     return @@identity       用于返回数值

                  end 
                  go
                  --调用存储过程
                  declare @pcid int--声明变量,用于保存存储过程的返回值
                 -执行存储过程,为变量赋值,并指定输入参数
                  exec @pcid=proc_addpc '新增的电脑'
                  select @pcid as '新增电脑编号' --输出变量

    处理存储过程中的错误

          一、语法

              raiserror(自定义错误信息,错误的严重级别,错误的状态)

                自定义错误信息:表示输出的错误提示文本

                错误的严重级别:表示用户定义错误的严重性级别。(0—18)级。    值越大,错误性就越小

                错误的状态:表示自定义错误的状态,值的范围在1—127

          eg:

              if OBJECT_ID('proc_myprocraiseerror','procedure') is not null
                   drop procedure proc_myprocraiseerror
              go

              create procedure proc_myprocraiseerror
               @cname varchar(20)='NET22'
               as
               begin
                  if not exists (select * from classInfo where cname = @cname)
                  begin
                      raiserror('NET22班已经存在不允许添加',16,1);
                  end 
                  insert into classInfo values(@cname)
                  return @@identity
               end;

               declare @cno int
                execute @cno = proc_myprocraiseerror default
              begin
               print '新增的班级编号是:' + @cno)
              end

  • 相关阅读:
    mysql cpu 占用高
    使用cron命令配置定时任务(cron jobs)
    python 获取时间
    linux 免密码登陆
    linux 查看登录日志
    shizhong
    正则(?is)
    python shell
    linux 时间设置
    java获取当前时间前一周、前一月、前一年的时间
  • 原文地址:https://www.cnblogs.com/yuxiaoyanran/p/3063523.html
Copyright © 2011-2022 走看看