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

什么是存储过程?

  根据百度百科的解释,存储过程是在大型关系型数据库中,一组完成特定功能的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. OpenResty之指令与常用API

    1. 指令 通过 Lua 编写 Nginx 脚本的基本构建块是指令.指令常用于指定 Lua 代码是几时执行的以及如何使用运行的结果.下图展示了指令执行的顺序. lua_capture_error_lo ...

  2. qDebug() << currentThreadId();

    从 dbzhang800 的博客中转载两篇关于事件循环的文章,放在一起,写作备忘. 再次提到的一点是:事件循环和线程没有必然关系. QThread 的 run() 方法始终是在一个单独线程执行的,但只 ...

  3. UML期末复习题——2.5:System Sequence Diagram & Post-condition

    第五题:系统顺序图 重要概念: 1.对象: 对象是特定行为与属性的集合. 对象的表示方式有三种: a.包括对象名和类名 b.只有类名. c.只有对象名 2.消息表示形式: 消息用于描述对象间交互的方式 ...

  4. docker下搭建owncloud

    在ubuntu下 搭建owncloud 用docker-compose启动,owncloud.yml文件内容 owncloud: image: owncloud: restart: always 开机 ...

  5. python列表插入--append(), extend(), insert()

    append(),extend(), insert()都是列表操作中常用的插入函数.其中前两个均接收一个参数,并插入到列表尾部.最后一个接收两个参数,将参数2插入到参数1之前. 本文主要讨论appen ...

  6. Unstanding LSTM

    1.RNNs 我们可以把RNNs看成一个普通网络做多次复制后叠加在一起组合起来,每一个网络都会把输出传递到下一个网络中. 把RNNs按时间步上展开,就得到了下图: 从RNNs链状结构可以容易理解到他是 ...

  7. manjar 搭建aria2c下载器

    从添加或删除软件管理程序里安装 aria2. 在一个地方创建一个文本文件,名为 「aria2.conf」 : rpc-user=我是用户名 rpc-passwd=我是密码 enable-rpc=tru ...

  8. Qt——鼠标拖动缩放窗口源码

    #ifndef MOVEWIDGET_H #define MOVEWIDGET_H #include <QWidget> #include <QEvent> class Mov ...

  9. Ubuntu修改终端显示的主机名、用户名、目录不同颜色

    打开终端输入:echo $PS1 输入:gedit ~/.bashrc #定位到如下代码: if [ "$color_prompt" = yes ]; then PS1='${de ...

  10. 46.前端html5标签学习

    HTML:TR  TD  TH  OL  UL  LI 这几个标签要区别 一.什么是HTML: 超文本标记语言(HyperText Markup Language),标准通用标记语言下的一个应用: 是 ...