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

什么是存储过程?

  根据百度百科的解释,存储过程是在大型关系型数据库中,一组完成特定功能的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=
else
select @flag= //执行
DECLARE @re int EXEC proc_Test ,@re output SELECT @re as '返回值'

SqlServer学习之存储过程的更多相关文章

  1. SQLServer 学习笔记之超详细基础SQL语句 Part 10

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 9------------------- 删除约束的语法 ALTER T ...

  2. SQLServer 学习笔记之超详细基础SQL语句 Part 7

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 6------------------- 29 存储过程和触发器 存储过 ...

  3. SQLServer 学习笔记之超详细基础SQL语句 Part 5

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 4------------------- 21使用默认 默认(也称默认值 ...

  4. SQLServer 学习笔记之超详细基础SQL语句 Part 4

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 3------------------- 17 带比较运算符的嵌套查询 ...

  5. SQLServer学习之表的操作

    SQLServer学习之表的操作 关系数据库通常包含多个表.数据库实际上是表的集合,数据库的数据或者信息都是存储在表中的.表是对数据进行存储和操作的一种逻辑结构,每一个表都代表一个对用户意义的对象. ...

  6. JAVA使用JDBC技术操作SqlServer数据库执行存储过程

    Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...

  7. SQLServer学习笔记系列6

    一.写在前面的话 时间是我们每个人都特别熟悉的,但是到底它是什么,用什么来衡量,可能很多人会愣在那里.时间可以见证一切,也可以消磨一切,那些过往的点点滴滴可思可忆.回想往年清明节过后,在家乡的晚上总能 ...

  8. SQLServer学习笔记系列5

    一.写在前面的话 转眼又是一年清明节,话说“清明时节雨纷纷”,武汉的天气伴随着这个清明节下了一场暴雨,整个城市如海一样,朋友圈渗透着清明节武汉看海的节奏.今年又没有回老家祭祖,但是心里依然是怀念着那些 ...

  9. SQLServer学习笔记系列3

    一.写在前面的话 今天又是双休啦!生活依然再继续,当你停下来的时候,或许会突然显得不自在.有时候,看到一种东西,你会发现原来在这个社会上,优秀的人很多,默默 吃苦努力奋斗的人也多!星期五早上按时上班, ...

随机推荐

  1. EEPROM与FLASH

    最初的ROM rom最初不能编程,出厂什么内容就永远什么内容,不灵活.后来出现了prom,可以自己写入一次,要是写错了,只能换一片,自认倒霉. 人类文明不断进步,终于出现了可多次擦除写入的EPROM, ...

  2. 下了个pkg包的jenkins,的使用方法

    三.如何启动Jenkins1.最简单的方法是双击Jenkins的pkg包,一步一步点同意,默认8080端口2.使用命令行启动打开terminal,进入到war包所在目录,执行命令: java -jar ...

  3. [Java]1.两数之和 - LeetCode

    1 题目 2 思路与代码 思路一:暴力法(两层For循环) 时间复杂度:O(n^2) 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n) 的时间.因此时间复杂度为 ...

  4. [C++/JavaScript]数据结构:栈和数列>案例引入(数制的转换)

    1 案例1:数制的转换 1.1 背景与原理 1.2 编程复现 (JavaScript版 复现) function convert(value, d){ stack = []; // 栈 result ...

  5. mysql一条语句实现插入或更新的操作

    ,),(,) ON DUPLICATE KEY UPDATE c=VALUES(c); 或者 INSERT INTO table (id,a,b,c) select id,a,b,c from xxx ...

  6. HANA数据自助查询

    SAP HANA的客户端是C/S模式的,远程使用不太方便,目前有一款TreeSoft数据库管理系统,可以实现通过web方式,访问自助查询HANA数据.大大提高工作效率.还支持MySQL,Oracle, ...

  7. OpenGL(6)——坐标系

    在掌握基本变换后,学习如何变换coordinate space. 对coordinate space进行变换的目的是将local space中各顶点坐标转换成normalized device coo ...

  8. QFramework 使用指南 2020 (四):脚本生成(2)ViewController 与 ViewController 嵌套绑定

    在上一篇,我们学习了,脚本生成的基本使用. 在这一篇,我们试着深入,聊聊脚本生成给我们带来的便利. 脚本生成的便利 首先,我们要知道,在 Unity 的游戏世界中都是以 GameObject 为单位的 ...

  9. img的src为空的时候,去除灰色的边框

  10. mysql常用引擎

    经常用MySQL数据库,但是,你在用的时候注意过没有,数据库的存储引擎,可能有注意但是并不清楚什么意思,可能根本没注意过这个问题,使用了默认的数据库引擎,当然我之前属于后者,后来成了前者,然后就有了这 ...