前言

前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数、存储过程、事务、触发器及游标,前文已介绍了函数,本文来介绍一下存储过程的创建、执行、删除。(还是以前文中银行系统为例)

概述

存储过程是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数(如果该存储过程带有参数)来执行。

语法


创建存储过程

  1. --创建存储过程
  2. CREATE PROC[EDURE] <存储过程名称>
  3. -- 添加存储过程所需的参数
  4. [
  5. <@参数1> <参数类型1> [= 默认值] [OUTPUT],
  6. ……
  7. <@参数n> <参数类型n> [= 默认值] [IN|OUT|OUTPUT]
  8. ]
  9. AS
  10. BEGIN
  11. -- 这里面可以写为变量赋值语句
  12. SQL语句块
  13. END

注意

  1. 其中存储过程名不能超过128个字,每个存储过程中最多设定1024个参数;
  2. 存储过程所需的参数可有可无,如果有参数为带参数存储过程,没有参数就是无参数存储过程;
  3. 带参数存储过程参数后面有关键字OUT|OUTPUT为带输出参数存储过程;

[IN|OUT|OUTPUT]介绍

  • IN:在参数后面加了IN关键字的表示为输入参数,默认的情况就是输入参数;
  • OUT:在参数后面加了OUT关键字的表示为输出参数;
  • OUTPUT:在参数后面加了OUTPUT关键字表示为输入输出参数,既是传入参数也是输出参数。

调用存储过程

  1. --调用存储过程
  2. EXEC<存储过程名称> [参数列表]

删除存储过程

  1. --删除存储过程
  2. DROP PROC[EDURE] <存储过程名称>

示例

  1. /*
  2. * 查询交易信息表中总的交易金额,以及支取和存入的总金额,并打印出来
  3. */
  4. --判断存储过程是否存在
  5. --存在则删除
  6. if exists(select * from sysobjects where name = 'proc_getTransMoney')
  7. drop procedure proc_getTransMoney
  8. go
  9. --创建无参数存储过程
  10. create proc proc_getTransMoney
  11. as
  12. begin
  13. declare @sum_money money --交易总额
  14. declare @get_money money --支出总额
  15. declare @sav_money money --存入总额
  16. select @sum_money = sum(TransMoney) from TransInfo
  17. select @get_money = sum(TransMoney) from TransInfo where TransType = '存款'
  18. select @sav_money = sum(TransMoney) from TransInfo where TransType = '取款'
  19. print '交易总额='+ltrim(convert(char,@sum_money))
  20. print '存入总额='+ltrim(convert(char,@sav_money))
  21. print '支出总额='+ltrim(convert(char,@get_money))
  22. end
  23. go
  24. --执行存储过程
  25. exec proc_getTransMoney
  26. go
  27. /*
  28. * 查询指定账户挂失的账户信息
  29. */
  30. --判断存储过程是否存在
  31. --存在则删除
  32. if exists(select * from sysobjects where name = 'proc_getLostAccount')
  33. drop procedure proc_getLostAccount
  34. go
  35. --创建带参数输出存储过程
  36. create proc proc_getLostAccount
  37. --
  38. @CId varchar(20) OUTPUT
  39. as
  40. begin
  41. select A.CustName as 姓名, A.IDCard AS 身份证号, A.TelePhone as 电话号码,
  42. C.CardID as 银行卡号,A.Address as 地址
  43. from AccountInfo as A inner join CardInfo as C on A.CustID = C.CustID
  44. where C.CardID =@CId AND C.IsLost = '是'
  45. end
  46. go
  47. --执行存储过程
  48. declare @CardID varchar(20);
  49. set @CardID= '银行卡号';
  50. exec proc_getLostAccount @CardID output;
  51. print @CardID;
  52. go

本文就介绍到这里。

如有疑问请联系我。

原文来自:简书

关系数据库SQL之可编程性存储过程的更多相关文章

  1. 关系数据库SQL之可编程性触发器

    前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数.存储过程.事务.触发器及游标,前文已介绍了函数.存储过程.事务,本文来介绍一下触发器的使用.(还是以 ...

  2. 关系数据库SQL之可编程性事务

    前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数.存储过程.事务.触发器及游标,前文已介绍了函数.存储过程,本文来介绍一下事务的使用.(还是以前面的银 ...

  3. 关系数据库SQL之可编程性函数(用户自定义函数)

    前言 在关系型数据库中除了前面几篇基本的数据库和数据表操作之外,还提供了可编程性的函数.存储过程.事务.触发器及游标. 本文介绍的是函数. 函数分为两种: 系统函数 用户自定义函数 准备工作 这里以银 ...

  4. SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性

    原文:SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 ...

  5. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...

  6. SQL Server将DataTable传入存储过程(Table Value Parameter)

    博主在做毕业设计的时候,需要用到事务处理和多次将数据写入不同的表中,但是 SQL Server 数据库是不支持数组类型变量的,想要实现数组的功能,可以通过 XML 和数据表的方法实现,但是实现方法非常 ...

  7. SQL Server(七)——存储过程

    一.概述 存储过程是一组编译在单个执行计划中的T-SQL语句 存储过程:就像函数一样的会保存在数据库中(可编程性) 存储过程的优点: 1.允许模块化程序设计 2.允许更快执行如果某操作需要大量T-SQ ...

  8. SQL 中常见的系统存储过程

    -- 来源于网络 -- 更详细的介结参考联机帮助文档 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 xp_logi ...

  9. sql server 常用的系统存储过程

      系统存储过程 说明 sp_databases 列出服务上的所有数据库 sp_helpdb 报告有关指定数据库或所有数据库的信息 sp_renamedb 更改数据库的名称 sp_tables 返回当 ...

随机推荐

  1. 微软借力.NET开源跨平台支持,布局物联网平台开发

    今天科技类最大的新闻,莫过于微软宣布.NET开发框架开源计划..NET 开源,集成 Clang 和 LLVM 并且自带 Android 模拟器,这意味着 Visual Studio 这个当下最好没有之 ...

  2. APP漏洞扫描器之本地拒绝服务检测详解

    APP漏洞扫描器之本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确全面.本文将讲一下应用漏洞 ...

  3. Web Audio介绍

    Web Audio还是一个比较新的JavaScript API,它和HTML5中的<audio>是不同的,简单来说,<audio>标签是为了能在网页中嵌入音频文件,和播放器一样 ...

  4. Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:当前页面 网站日志分析项目案例 ...

  5. [转]GC简介

    [转]GC简介 原文链接:http://www.cnblogs.com/cposture/p/4845189.html 原文写得太好了,这里转一下. 1 GC机制 1.1 对象 从计算机的角度,装有数 ...

  6. mysql 的 VARCHAR VARCHAR2

    mysql 里面竟然没有 VARCHAR2 ??

  7. Chrome开发者工具不完全指南(一、基础功能篇)

    就算你不是一名前端开发工程师,相信你也不会对Chrome浏览器感到陌生.根据最新的一份(2015/06)的浏览器市场占有率报告,Chrome近乎占有浏览器天下的半壁江山.简单.快捷使它成为了新时代人们 ...

  8. SSIS Design5:使用暂存

    以数据流的方式来设计Package,将核心数据处理移动到数据流中,一般情况下,能够减少临时表的创建,获得较高的处理性能,在某些情况下,使用暂存表(staging table)能够优化package设计 ...

  9. LINQ系列:Linq to Object排序操作符

    LINQ排序操作符包括:OrderBy.OrderByDescending.ThenBy.ThenByDescending及Reverse. 1. OrderBy 1>. 原型定义 public ...

  10. 自定义配置UEditor 工具栏上的按钮列表

    修改配置项的方法: 1. 方法一:修改 ueditor.config.js 里面的 toolbars 2. 方法二:实例化编辑器的时候传入 toolbars 参数 方法一:在ueditor.confi ...