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

什么是存储过程?

  根据百度百科的解释,存储过程是在大型关系型数据库中,一组完成特定功能的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 outputSELECT @re as '返回值'

SqlServer学习之存储过程相关推荐

  1. SQLServer学习笔记系列6

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

  2. SQLServer学习笔记系列2

    SQLServer学习笔记系列2 一.写在前面的话 继上一次SQLServer学习笔记系列1http://www.cnblogs.com/liupeng61624/p/4354983.html以后,继 ...

  3. 高性能SQLServer通用分页存储过程

    这是我之前整理的高性能SQLServer 通用分页存储过程,测试性能还不错,特此分享出来,如果有人能更好地优化,请留言,谢谢! SQL代码  1 USE [数据库名称]  2 GO  3 /***** ...

  4. 【推荐】(SqlServer)不公开存储过程sp_Msforeachtable与sp_Msforeachdb详解

    [推荐](SqlServer)不公开存储过程 sp_Msforeachtable与sp_Msforeachdb详解 --通过知识共享树立个人品牌. 一.简要介绍: 系统存储过程sp_MSforeach ...

  5. MySQL学习——操作存储过程

    MySQL学习--操作存储过程 摘要:本文主要学习了使用DDL语句操作存储过程的方法. 了解存储过程 是什么 存储过程是一组为了完成特定功能的SQL语句集合. 使用存储过程的目的是将常用或复杂的工作预 ...

  6. SQLServer学习笔记系列5

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

  7. 使用SQLSERVER的扩展存储过程实现远程备份与恢复

    原地址:http://blog.csdn.net/xluzhong/articles/387533.aspx 最近我在为公司的框架程序(以数据应用为导向的应用体系)做数据管理模块,这个模块的需求比较简 ...

  8. 如何在sqlserver中写存储过程

    original link http://www.codeproject.com/Articles/126898/Sql-Server-How-to-write-a-Stored-procedure- ...

  9. 学习笔记--存储过程的创建和调用

    学习笔记–存储过程的创建和调用 定义 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在程序中就可以调用多次.如果某次操作需要执行多次SQL,使用存储过程比单纯SQL ...

最新文章

  1. 计算机解决问题没有奇技淫巧,但动态规划还是有点套路
  2. 配置SQL Server 2008 镜像
  3. linux时间同步_如何在Ubuntu上使用FreeFileSync同步文件
  4. 视觉计算/深度学习/人工智能 笔试面试 汇总(腾讯、网易、yy、美图等)
  5. tablewidget字体显示不全_ios 容器内容显示原理及调整
  6. origin安装包_作图技巧|研究生需要会的20个Origin操作,作图又快又好看(二)...
  7. 算法导论学习笔记 第2章 算法基础
  8. 循环链表实现两个多项式相加主要代码
  9. Magento: 解决 Bootstrap 3 与prototype并用的时候, 下拉菜单消失的问题 Bootstrap 3 dropdown menu dis...
  10. gradle 项目打包成多个jar包_自从用完 Gradle 后,有点嫌弃 Maven 了!
  11. 用Kubeadm安装K8s后,kube-flannel-ds一直CrashLoopBackOff
  12. 工作——常用语法记录
  13. dea模型java实例_大水计划之DEA JAVA
  14. 费纳姆密码-二进制密码
  15. python知识:装饰器@property有啥用途?
  16. jvm的类加载和运行时数据区和垃圾回收
  17. 敏捷仪式感之:敏捷宣传栏
  18. 开源软件总体拥有成本指南
  19. 深度学习入门之神经网络的学习思维导图
  20. 如何更改 Win7 网络连接显示名称

热门文章

  1. warning: expression result unuesd 可能原因是函数忘了加括号,
  2. MySQL-5.7.21非图形化下载、安装、连接问题记录
  3. 面向对象(二)——三大特性(封装、继承、多态)
  4. [Leetcode][第98 450 700 701题][JAVA][二叉搜索树的合法性、增、删、查][递归][深度遍历]
  5. 杜克大学计算机硕士要几年,2017杜克大学春季不招计算机专业的硕士?
  6. c语言分量的运算符,C语言基础(04-运算符和表达式)
  7. java 反射 成员变量_java基础--反射(成员变量)
  8. 360桌面计算机,360桌面管理软件
  9. len在python_len在python
  10. Redis windows学习(一)——redis安装和基础使用