存储过程(procedure)是 sql 语句和流程控制语句的预编译集合。
它的作用就是具封装代码,被外部程序调用。例如 java 根据存储过程的名字,直接调用。而函数是在内部调用的。
1、没有输入参数,没有输出参数的存储过程。
create proc proc_minMoney -- proc 也可使用 procedure
as
select cardMoney from BankCard
go
-- 调用存储过程
exec proc_minMoney
2、有输入参数,没有输出参数的存储过程。
create proc proc_cunqian
@cardNo varchar(30), -- 参数 cardNo
@money money -- 参数 money
as
update BankCard set CardMoney = CardMoney + @money
where CardNo = @cardNo
go
-- 调用
exec proc_cunqian '622848778787344',2000
3、有输入参数,没有输出参数,但有返回值的存储过程。(返回值必须是整数)
create proc proc_cunqian
@cardNo varchar(30), -- 参数 cardNo
@money money -- 参数 money
as
return 1
go
-- 调用
declare @result int --声明变量
exec @result = proc_cunqian ''622848778787344',2000 -- 将返回值赋值给变量 @result
select @result -- 打印返回值
4、有输入参数,有输出参数的存储过程。
create proc proc_selectEXChange
@start varchar(20), -- 开始时间
@end varchar(20), -- 结束时间
@sumIn money output, -- 存款总金额
@sumOut money output -- 取款总金额
as
selcet @sumIn = (select sum(MoneyInBank) from CardExchange
where ExchangeTime between @start + '00:00:00' and @end + '23:59:59')
selcet @sumOut = (select sum(MoneyOutBank) from CardExchange
where ExchangeTime between @start + '00:00:00' and @end + '23:59:59')
go
-- 调用
declare @sumIn money
declare @sumOut money
exec proc_selectEXChange '2021-1-1','2021-2-1',@sumIn output,@sumOut output -- 将返回的结果放入变量中 @sumIn 和 @sumOut中,注意不要忘记加 output
select @sumIn -- 打印结果 @sumIn
select @sumOut -- 打印结果 @sumOut
返回值与输出参数区别:
返回值:只能返回一个值,且必须是整数。
输出参数:可以返回多个值,对数据类型没有限制。
5、具有同时输入输出参数的过程
即传入一个参数,同时再输出这个参数。
create proc proc_Pwd
@pwd nvarchar(20) output
as
@pwd = @pwd + '123456'
go
-- 执行
declare @pwd = '000'
exec proc_Pwd @pwd output
select @pwd
网友评论