存储过程
我们的故事会伴随一生。 --zhu
存储过程
存储过程(Procedure):是SQL语句和流程控制语句的预编译集合。
(1)没有输入参数,没有输出参数的存储过程。
定义存储过程实现查询出账户余额最低的银行卡账号信息,显示银行卡卡号,姓名,账户余额
--方案一:
create proc proc_MinMoneyCard
as
select top 1 CardNo 银行卡号,realName 姓名,CardMoney 余额
from BankCard inner join AccountInfo on BankCard.AccountId = AccountInfo.AccountId
go
--方案二:(余额最低,有多个人则显示结果是多个)
create proc proc_MinMoneyCard
as
select CardNo 银行卡号,realName 姓名,CardMoney 余额
from BankCard inner join AccountInfo on BankCard.AccountId = AccountInfo.AccountId
where CardMoney = (select MIN(CardMoney) from BankCard)
go
(2)有输入参数,没有输出参数的存储过程
模拟银行卡存钱操作,传入银行卡卡号,存钱金额,实现存钱操作
create proc proc_Save
@CardNo varchar(30),
@money money
as
update BankCard set CardMoney = CardMoney +@money
where CardNo=@CardNo
insert into CardExchange(CardNo,MoneyInBank ,MoneyoutBank,ExchangeTime)
values(@CardNo,@money,0,getdate())
go
--调用
exec proc_Save '622372130312089',1000
(3)有输入参数,没有输出参数,但是有返回值的存储过程(返回值必须整数)。
模拟银行卡取钱操作,传入银行卡号,取钱金额,实现存钱操作
取钱成功返回1,失败返回-1
create proc proc_Withdraw
@CardNo varchar(30),
@money money
as
update BankCard set CardMoney = CardMoney - @money
where CardNo=@CardNo
if @@ERROR <> 0
return -1
insert into CardExchange(CardNo,MoneyInBank ,MoneyoutBank,ExchangeTime)
values(@CardNo,0,@money,getdate())
return 1
go
declare @returnValue int
exec @returnValue= proc_Withdraw '622372130312089',2000
select @returnValue
(4)有输入参数,有输出参数的存储过程
查询出某时间的银行卡存取款信息以及存储过程总金额,取款总金额,
传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。
create proc proc_selectExchange
@start varchar(20), --开始时间
@end varchar(20), --结束时间
@sumIn varchar(20), --存款总金额
@sumOut varchar(20), --取款总金额
as
select @sumIn =(select sum(MoneyInBank) from CardExchage where Exchange Time between start + '00:00:00' and end +'23:59::59')
select @sumOut =(select sum(MoneyOutBank) from CardExchage where Exchange Time between start + '00:00:00' and end +'23:59:59')
select * from CardExchange where ExchangeTime between start + '00:00:00' and end +'23:59:59'
--调用
declare @sumIn money
declare @sumOut money
exec proc_selectExchange '2020-1-1','2020-12-11',@sumIn output,@sumOut output
select @sumIn
select @sumOut
(5)具有同时输入输出参数的存储过程
密码升级,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级为8位密码
create proc proc_PwdUpgrade
@CardNo nvarchar(20),--卡号
@pwd nvarchar(20) output --卡号
as
if not exists(select * from BankCard where CardNo=@CardNo and CardPwd = @pwd)
set @pwd=""
else
begin
if len(@pwd)<8
begin
declare @len int = 8-len(@pwd)
declare @i int=1
while @i <= @len
begin
set @pwd =@pwd +cast(floor(rand()*10) as varchar(1))
set @i=@i+1
end
update BankCard set Card Pwd =@pwd where CardNo =@CardNo
end
end
go
--调用
declare @pwd nvarchar(20) = '123456'
exec procPwdUpgrade '622372130312089',@pwd output
select @pwd

浙公网安备 33010602011771号