存储过程之SQLServer

没有输入参数,没有输出参数的存储过程

--定义存储过程实现查询账号余额最低的银行卡账号信息,显示银行卡号,姓名,账户余额
create proc proc_CardInfo
as
	begin
	select *from BankCard left join AccountInfo on BankCard.AccountId=AccountInfo.AccountId;
	end;
go
exec proc_CardInfo;

有输入参数,没有输出参数的存储过程

--模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作

select *from BankCard;
select *from CardExchange;

create proc proc_BankCardExchange
@cardNo varchar(20),
@moneyInBnak money
as
begin
	update BankCard set CardMoney=CardMoney+@moneyInBnak where CardNo=@cardNo;
	if @@ERROR=0
	begin
	insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime)
	values(@cardNo,@moneyInBnak,0,GETDATE());
	end;
end;
exec proc_BankCardExchange '6225125478544588',200;

有输入参数,没有输出参数,但是有返回值的存储过程(返回值必须整数)

--模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作
--取钱成功,返回1,取钱失败返回-1

create proc proc_DrawMoney
@cardNo varchar(20),
@drawMoney money
as
begin
	if exists(select *from BankCard where CardNo=@cardNo and CardMoney>=@drawMoney)
		begin
		update BankCard set CardMoney=CardMoney-@drawMoney where CardNo=@cardNo;
		if @@ERROR<>0 return -1;
		insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) values
		(@cardNo,0,@drawMoney,GETDATE());
			return 1;
		end
	else
		return -1;
end;

declare @result int;
exec @result= proc_DrawMoney '6225125478544588',100;
select @result;

有输入参数,有输出参数的存储过程

--查询出某时间段的银行存钱信息以及存款总金额,取款总金额
--传入开始时间、结束时间、显示存取款交易信息的同时,返回存款总金额,取款总金额
create proc proc_DrawMoneySumMoneyOfInOut
@st varchar(20),
@et varchar(20),
@moneyInBank money output,
@moneyOutBank money output
as 
begin
select *from CardExchange where ExchangeTime 
between convert(smalldatetime,@st+' 00:00:00') 
and convert(smalldatetime,@et+' 23:59:59');
set @moneyInBank=(select SUM(MoneyInBank) from CardExchange where ExchangeTime 
between convert(smalldatetime,@st+' 00:00:00') 
and convert(smalldatetime,@et+' 23:59:59'));
set @moneyOutBank=(select SUM(MoneyOutBank) from CardExchange where ExchangeTime 
between convert(smalldatetime,@st+' 00:00:00') 
and convert(smalldatetime,@et+' 23:59:59'));
end;

declare @moneyInSum money;
declare @moneyOutSum money;
exec proc_DrawMoneySumMoneyOfInOut '2023-1-1','2024-1-1',@moneyInSum output,@moneyOutSum output;
select @moneyInSum;
select @moneyOutSum;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值