前言
前面一文提到关系型数据库提供了可编程性的函数、存储过程、事务、触发器及游标,前文已介绍了函数,本文来介绍一下存储过程的创建、执行、删除。(还是以前文中银行系统为例)
概述
存储过程是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数(如果该存储过程带有参数)来执行。
语法
创建存储过程
--创建存储过程CREATE PROC[EDURE] <存储过程名称> -- 添加存储过程所需的参数 [ <@参数1> <参数类型1> [= 默认值] [OUTPUT], …… <@参数n> <参数类型n> [= 默认值] [IN|OUT|OUTPUT] ]ASBEGIN -- 这里面可以写为变量赋值语句 SQL语句块END 参数类型n> 参数类型1> 存储过程名称>
注意:
其中存储过程名不能超过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_getTransMoneygo--创建无参数存储过程create proc proc_getTransMoneyasbegin 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))endgo--执行存储过程exec proc_getTransMoneygo/** 查询指定账户挂失的账户信息*/--判断存储过程是否存在--存在则删除if exists(select * from sysobjects where name = 'proc_getLostAccount')drop procedure proc_getLostAccountgo--创建带参数输出存储过程create proc proc_getLostAccount--@CId varchar(20) OUTPUTasbegin 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 = '是'endgo--执行存储过程declare @CardID varchar(20);set @CardID= '银行卡号';exec proc_getLostAccount @CardID output;print @CardID;go
*本文就介绍到这里。
如有疑问请联系我。*原文来自: