zoukankan      html  css  js  c++  java
  • SqlServer学习之存储过程

    前言:对于存储过程一直有一种抵触的心理,因为毕业至今所在的公司开发组都不是很规范,对于开发的一些注意事项并没有很多的规定,只是在知乎上查找相关知识的时候,看到很多人对于在程序里使用存储过程的不好之处都有很多介绍,碧如逻辑不清晰,调试难等,在项目中也不需要些存储过程,所以我也没有认真学习过相关知识,但是最近准备面试,发现还是有很多公司对于存储过程是有要求的,今天写点东西记录一下自己的学习过程,其实也就是对别人的博客进行一个自己的汇总。

    什么是存储过程?

      根据百度百科的解释,存储过程是在大型关系型数据库中,一组完成特定功能的Sql语句集,在数据库中,经过一次编译之后调用不需要再次编译,用户通过指定存储过程的名称并给出参数(如果有的话)来执行它。

    存储过程的优点?

      1、响应时间上有优势,普通sql,程序需要验证语句是否正确,以及编译优化,如果有很多业务逻辑需要进行处理,可能会多次链接数据库,但是使用存储过程的话,就只需要一次(预编译之后会被存储到高速缓存里),而且运算过程中不需要把数据取出数据库,数据库的IO通道效率很差,大量数据取出来很浪费时间;

      2、对于系统的稳定性有帮助,程序可能会出BUG导致系统不稳定,而存储过程则只要数据库不出现问题,基本上不会出现问题;

      3、减少了网络流量,只需要传输存储过程的名称和参数即可,从而降低了传输量;

      4、增强系统安全性,参数化的存储过程可以防止SQL注入,只授权部分用户修改存储过程的权限;

      5、可可重复使用,使得服务器端开发和数据库开发同时进行,加快开发速度;

      6、发布程序方便快捷,如果使用常规的sql语句来处理业务逻辑,业务修改,需要重新编译,然后停止程序进行发布;但是如果业务逻辑写在存储过程中,只需要修改存储过程即可,提高了程序的可移植性。

    不过现在有些框架支持把Sql写到配置文件里面,只需要修改配置文件就可以修改业务。

    存储过程的缺点?

      1、移植困难,不同类型的数据库存储过程语言差距巨大,基本上无法直接移植;

      2、存储过程本身运算性能很差,而且无法进行封装,不符合OOP的思想;

      3、对于开发和维护的的成本较高。

    存过过程的写法

    无参无输出的存储过程:

    Create procedure 存储过程名
    as
    SQL语句

    带参无输出的存储过程:

    Create procedure 存储过程名
    @参数  参数类型
    as
    SQL语句

    带参带输出的存储过程:

    Create procedure 存储过程名
    @参数  参数类型
    @返回值 返回类型 output
    as
    SQL语句
    CREATE  procedure  proc_Test
    @orderNum int,
    @flag bit OUTPUT
    as
    if exists(
    select * from SaleOrder where OrderNumber = @orderNum)
    select @flag=1
    else
    select @flag=0
    
    
    //执行
    DECLARE @re int 
    
    EXEC proc_Test 10,@re output
    
    SELECT @re as '返回值'
  • 相关阅读:
    python格式化输出之format用法
    Mybatis插入数据返回主键
    DBC 和 Mybatis连接mysql数据库的时候,设置字符集编码
    工具列表
    Idea的Git如何回退到上一个版本
    mybatis-plus id主键生成的坑
    JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙!
    DDD-快速hold住业务的利器
    深入理解ThreadLocal的原理和内存泄漏问题
    VUE开发--环境配置
  • 原文地址:https://www.cnblogs.com/yuchenghao/p/10645554.html
Copyright © 2011-2022 走看看