关系数据库SQL之可编程性存储过程
前言
前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数、存储过程、事务、触发器及游标,前文已介绍了函数,本文来介绍一下存储过程的创建、执行、删除。(还是以前文中银行系统为例)
概述
存储过程是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数(如果该存储过程带有参数)来执行。
语法
创建存储过程
--创建存储过程
CREATE PROC[EDURE] <存储过程名称>
-- 添加存储过程所需的参数
[
<@参数1> <参数类型1> [= 默认值] [OUTPUT],
……
<@参数n> <参数类型n> [= 默认值] [IN|OUT|OUTPUT]
]
AS
BEGIN
-- 这里面可以写为变量赋值语句
SQL语句块
END
注意:
- 其中存储过程名不能超过128个字,每个存储过程中最多设定1024个参数;
- 存储过程所需的参数可有可无,如果有参数为带参数存储过程,没有参数就是无参数存储过程;
- 带参数存储过程参数后面有关键字
OUT|OUTPUT
为带输出参数存储过程;[IN|OUT|OUTPUT]介绍:
- IN:在参数后面加了
IN
关键字的表示为输入参数,默认的情况就是输入参数;- OUT:在参数后面加了
OUT
关键字的表示为输出参数;- OUTPUT:在参数后面加了
OUTPUT
关键字表示为输入输出参数,既是传入参数也是输出参数。
调用存储过程
--调用存储过程
EXEC<存储过程名称> [参数列表]
删除存储过程
--删除存储过程
DROP PROC[EDURE] <存储过程名称>
示例
/*
* 查询交易信息表中总的交易金额,以及支取和存入的总金额,并打印出来
*/
--判断存储过程是否存在
--存在则删除
if exists(select * from sysobjects where name = 'proc_getTransMoney')
drop procedure proc_getTransMoney
go
--创建无参数存储过程
create proc proc_getTransMoney
as
begin
declare @sum_money money --交易总额
declare @get_money money --支出总额
declare @sav_money money --存入总额
select @sum_money = sum(TransMoney) from TransInfo
select @get_money = sum(TransMoney) from TransInfo where TransType = '存款'
select @sav_money = sum(TransMoney) from TransInfo where TransType = '取款'
print '交易总额='+ltrim(convert(char,@sum_money))
print '存入总额='+ltrim(convert(char,@sav_money))
print '支出总额='+ltrim(convert(char,@get_money))
end
go
--执行存储过程
exec proc_getTransMoney
go
/*
* 查询指定账户挂失的账户信息
*/
--判断存储过程是否存在
--存在则删除
if exists(select * from sysobjects where name = 'proc_getLostAccount')
drop procedure proc_getLostAccount
go
--创建带参数输出存储过程
create proc proc_getLostAccount
--
@CId varchar(20) OUTPUT
as
begin
select A.CustName as 姓名, A.IDCard AS 身份证号, A.TelePhone as 电话号码,
C.CardID as 银行卡号,A.Address as 地址
from AccountInfo as A inner join CardInfo as C on A.CustID = C.CustID
where C.CardID =@CId AND C.IsLost = '是'
end
go
--执行存储过程
declare @CardID varchar(20);
set @CardID= '银行卡号';
exec proc_getLostAccount @CardID output;
print @CardID;
go
本文就介绍到这里。
如有疑问请联系我。
原文来自:简书
关系数据库SQL之可编程性存储过程的更多相关文章
- 关系数据库SQL之可编程性触发器
前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数.存储过程.事务.触发器及游标,前文已介绍了函数.存储过程.事务,本文来介绍一下触发器的使用.(还是以 ...
- 关系数据库SQL之可编程性事务
前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数.存储过程.事务.触发器及游标,前文已介绍了函数.存储过程,本文来介绍一下事务的使用.(还是以前面的银 ...
- 关系数据库SQL之可编程性函数(用户自定义函数)
前言 在关系型数据库中除了前面几篇基本的数据库和数据表操作之外,还提供了可编程性的函数.存储过程.事务.触发器及游标. 本文介绍的是函数. 函数分为两种: 系统函数 用户自定义函数 准备工作 这里以银 ...
- SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性
原文:SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 ...
- Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...
- SQL Server将DataTable传入存储过程(Table Value Parameter)
博主在做毕业设计的时候,需要用到事务处理和多次将数据写入不同的表中,但是 SQL Server 数据库是不支持数组类型变量的,想要实现数组的功能,可以通过 XML 和数据表的方法实现,但是实现方法非常 ...
- SQL Server(七)——存储过程
一.概述 存储过程是一组编译在单个执行计划中的T-SQL语句 存储过程:就像函数一样的会保存在数据库中(可编程性) 存储过程的优点: 1.允许模块化程序设计 2.允许更快执行如果某操作需要大量T-SQ ...
- SQL 中常见的系统存储过程
-- 来源于网络 -- 更详细的介结参考联机帮助文档 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 xp_logi ...
- sql server 常用的系统存储过程
系统存储过程 说明 sp_databases 列出服务上的所有数据库 sp_helpdb 报告有关指定数据库或所有数据库的信息 sp_renamedb 更改数据库的名称 sp_tables 返回当 ...
随机推荐
- Nova PhoneGap框架 第二章 理解index.html
跟绝大多数PhoneGap程序一样,Index.html是程序的入口.这个页面应该完成应用程序的初始化工作. 首先,让我们来看看这个页面通常都长什么样子: 下面我将一一解释这个页面都做了哪些初始化工作 ...
- 用.NET MVC实现长轮询,与jQuery.AJAX即时双向通信
两周前用长轮询做了一个Chat,并移植到了Azure,还写了篇博客http://www.cnblogs.com/indream/p/3187540.html,让大家帮忙测试. 首先感谢300位注册用户 ...
- Azure PowerShell (11) 使用自定义虚拟机镜像模板,创建Azure虚拟机并绑定公网IP(VIP)和内网IP(DIP)
<Windows Azure Platform 系列文章目录> 前提要求: 1.假设笔者捕获一个Azure虚拟机模板,命名为leistorage 关于Azure虚拟机模板,请参考下图: 2 ...
- org.artofsolving.jodconverter.office.OfficeException: failed to start and connect
org.artofsolving.jodconverter.office.OfficeException: failed to start and connect docviewer 调用 openo ...
- 带你走近AngularJS - 基本功能介绍
带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------- ...
- Spring学习记录(六)---使用外部属性文件
在bean配置资源或系统部署,如数据库的连接时,需要这样: 要包含相关jar包:c3p0.jar 和mysql.connector.jar xml配置: <bean id="dataS ...
- C#设计模式系列:工厂方法模式(Factory Method)
1. 工厂方法模式简介 1.1 定义 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法模式是以一个类的实例化延迟到其子类. Factory Method模式用于在不指定待创建 ...
- 【Win10应用开发】自定义磁贴通知的排版
前面老周用了两篇烂文,向大家介绍了Adaptive磁贴的模板使用.那些XML模板已经很强大了,不过,如果你觉得那些排版还不足以满足需求,不妨试试自己来定义磁贴的内容. 其实,Runtime App支持 ...
- windows8建立局域网的方法
win8建立局域网的方法:1.首先笔记本有无线网卡且支持 虚拟WIFI ;2.按win+X键,选择"命令提示符(管理员)A"; 3.输入"netsh wlan set h ...
- c语言表白程序代码
双十一要到了,好激动啊!!! 是时候准备出手了! 花了一天的时间写的表白代码. 表示自己弱弱的..... 看了网上好多都是js写的,感觉碉堡了!js用的不熟,前端不好,java,Python写起来 ...