SQL Server—存储过程(输出参数)

作者 : 攻城狮 发布时间: 2023-03-20 共332人阅读

接上一节内容

举例4:有输入参数,有输出参数的存储过程

查询出某时间段的银行存取款信息以及存款总金额、取款总金额

传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额、取款总金额。

--创建存储过程
create procedure proc_selectExChange
    @start varchar(20),    --开始时间
    @end varchar(20),      --结束时间
    @sumIn money output,   --存款总金额
    @sumOut money output   --取款总金额
as
    select @sumIn = (select sum(MoneyInBank) from CardExchange
        where ExchangeTime between @start + ' 00:00:00' and @end + ' 23:59:59')  --注意这里的时间前面有个空格
    select @sumOut = (select sum(MoneyOutBank) from CardExchange
        where ExchangeTime 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'   --注意这里的时间前面有个空格
go

--调用存储过程
declare @sumInAll money
declare @sumOutAll money
exec proc_selectExChange '2020-1-1','2020-12-11',@sumInAll output,@sumOutAll output
select @sumInAll
select @sumOutAll
--注意:
--1、第三个、第四个参数是一个输出参数,不是从外面传进来东西,是没有值的,不能直接写常量。我们应该在外面定义一个变量,来接收它的结果,然后保存。所以这里定义一个变量来保存。
--2、如果调用存储过程时传入了一个变量,而这个变量是代表输出的含义,此时在变量的后面要加上output,这时候才能把输出的值保存到变量里面去。

/*
procedure:[prə'siːdʒə] 程序 / 手续 / 步骤 / 外科手术
proc_selectExChange:定义的存储过程的名字
*/

举例4:具有同时输入输出参数的存储过程

密码升级,传入卡号和密码,如果卡号密码正确,并且密码长度<8,自动升级成8位密码。

--创建存储过程
create procedure procPwdUpgrade
@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 CardPwd = @pwd where CardNo = @CardNo
        end
    end
go

--调用存储过程
declare @pwd nvarchar(20) = '123456'   --这里和上一个例子不同的是,这里给了一个特定的值
exec procPwdUpgrade '6225125478544587',@pwd output
select @pwd
--判断参数是输入参数还是输出参数,关键看在存储过程中怎么调用这个参数。

/*
rand():随机生成一个0到1之间的小数
floor():舍尾取整
floor(rand()*10):随机生成一个0到9之间的整数(包含0和9)
*/

 

1.本站所有资源收集于互联网和用户上传,如有侵权请联系客服删除;
2.本站不保证所提供下载资源的准确性、安全性和完整性,请自行测试;
3.资源仅供学习交流使用,版权归原作者所有,请在下载后24小时之内删除;
4.如用于商业或非法用途实属个人行为,与本站无关,一切后果由用户自负;
5.本站提供的源码、主题模板、插件等资源,都不包含技术服务,请大家谅解;
6.本站所设置的资源售价只是用于赞助,收取费用仅维持本站的日常运营所需;
7.如果您有好的源码或者教程,请至个人中心发布资源,将有积分奖励和额外收入;
8.本站默认解压密码:www.ittiantang.com,如有链接无法下载,请联系管理员处理。

IT天堂 » SQL Server—存储过程(输出参数)

常见问题FAQ

IT天堂的会员权益只能通过充值获得吗?
您可以通过签到功能获得积分,用积分兑换会员权益。
网站上的VIP资源只能通过充值购买吗?
您可以通过每日签到获得积分,使用积分直接购买VIP资源。

发表评论