zoukankan      html  css  js  c++  java
  • 存储过程入门(一)。

    一、存储过程的定义和概括:

     

         存储过程就是通过将实现某个常用或是复杂的功能的SQL语句事先编写好并声明一个名字保存在数据库的一串SQL代码。

    那么有人就会有疑问了,既然存储过程就是一串SQL语句,那我们还为什么要单独的弄这样一个技术能。接下来我们就来看看存储过程的有点。

       存储过程的优点:

                 1)、可重复使用。类似于方法,从而减少数据库开发人员的代码量。

                 2)、提高性能:存储过程再创建的时候就经过了编译,再次使用的时候不需要再次编译。而一般的SQL语句再次使用的时候不但要再次缀写编码而且也要进行再次编译。

                 3)、减少网络流量。存储过程存储在服务器上,调用的时候只需要给出存储过程的名称和参数即可,因此减少了网络传输数据量。

                 4)、安全性。参数化的存储过程可以防止注入攻击。

    二、存储过程的创建:

    创建语法:
      CREATE PROC [EDURE] procedure_name[;number]
      [{@parameter data_type}
      [VARYING][=default][OUTPUT]]
      [,...n]
      [WITH
                 {RECOMPILE|ENCRYPTION|RECOMPILE , ENCRYPTION } ] 
      
      [ FOR REPLICATION ] 
      
      AS sql_statement [ ...n ]
    
    --参数含义
      procedure_name: 存储过程名称,后跟的number必须为数字,是为了区分一组同名的存储过程。一个数据库中存储过程的名字比喻唯一。
      @parameter:是存储过程的参数。在Create Procedure 语句中,可以声明一个或多个参数。当调用该存储过程时,用户必须给出所有的参数值,除非定义了参数的缺省值。若参数的形式以 @parameter=value 出现,则参数的次序可以不同,否则用户给出的参数值必须与参数列表中参数的顺序保持一致。若某一参数以@parameter=value 形式给出,那么其它参数也必须以该形式给出。一个存储过程至多有1024 个参数。@开头表示局部变量,@@开头表示全局变量。
     data_type:数据类型。在存储过程中,所有的数据类型包括text 和image 都可被用作参数。但是,游标cursor 数据类型只能被用作OUTPUT 参数。当定义游标数据类型时,也必须对VARING 和OUTPUT 关键字进行定义。对可能是游标型数据类型的OUTPUT 参数而言,参数的最大数目没有限制。
      VARYING:指定OUTPUT参数支持的结果集,仅用于游标的定义。
     default:是指参数的缺省值。如果定义了缺省值,那么即使不给出参数值,则该存储过程仍能被调用。缺省值必须是常数,或者是空值。
     OUTPUT:表明该参数是一个返回参数。用OUTPUT 参数可以向调用者返回信息。Text 类型参数不能用作OUTPUT 参数。
     RECOMPILE:指明SQL Server 并不保存该存储过程的执行计划,该存储过程每执行一次都又要重新编译。
    ENCRYPTOIN:表明SQL Server 加密了syscomments 表,该表的text 字段是包含有Create procedure语句的存储过程文本,使用该关键字无法通过查看syscomments 表来查看存储过程内容。
    FOR REPLICATION:选项指明了为复制创建的存储过程不能在订购服务器上执行,只有在创建过滤存储过程时(仅当进行数据复制时过滤存储过程才被执行),才使用该选项。FOR REPLICATION与WITH RECOMPILE 选项是互不兼容的。
    AS:表面该存储过程要执行的动作。
    sql_statement:是任何数量和类型的包含在存储过程中的SQL 语句。
        

     小例子:

    下面来个小例子:
     CREATE PROC userquery
        @username varchar(20)
        @password varchar(20)
     AS
       BEGIN
          select * from  userinfo where username=@username and password=@password
       END
    GO
    -----------------------------------------------------
    运行
      exec userquery @username="admin" @password="123456"
    ------------------------------------------------------
    结果:
    username   password
    admin         123456
       
    View Code
  • 相关阅读:
    2017-3-7 leetcode 66 119 121
    2017-3-6 leetcode 118 169 189
    2017-3-5 leetcode 442 531 533
    c++ std
    2017-3-4 leetcode 414 485 495
    2017-3-3 leetcod 1 35 448
    想做手游
    编程规范
    1165: 零起点学算法72——首字母变大写
    1164: 零起点学算法71——C语言合法标识符(存在问题)
  • 原文地址:https://www.cnblogs.com/tanzhen/p/4176615.html
Copyright © 2011-2022 走看看