关于存储过程

时间:2019-06-06 05:47:16

标签: sql-server tsql stored-procedures

我是存储过程的新手。我想将SELECT语句返回的值分配给一个变量。返回值的数据类型为Numeric(18,3),大约有200行作为输出。是否可以在变量中分配所有这些值?如果不是,应该使用那些值吗?

GO
CREATE PROCEDURE SMSBRegisCharge

@balance numeric(18,3)
AS

@balance = Select (dbo.GetAvailBalAmt(acc, 0)/100) from SMSCIF 
           where (dbo.GetAvailBalAmt(acc,0)/100) > 100;

预期的输出。

14909.7000000
103203.4100000
3826.8700000
131222.6000000
198.9900000
4726.7800000
514423.8000000
542.7600000
16529.1000000
379.8100000
41442.7200000
337072.2700000
39056.4700000
199620.2100000

1 个答案:

答案 0 :(得分:0)

根据问题的语法,我假设您正在使用SQL Server。

您可以直接在SELECT中分配一个单个值:

select @balance = dbo.GetAvailBalAmt(acc, 0) / 100
from SMSCIF
where (dbo.GetAvailBalAmt(acc,0)/100) > 100;

您也可以将子查询与set一起使用:

set @balance = (Select @balance = dbo.GetAvailBalAmt(acc, 0) / 100
                from SMSCIF
                where (dbo.GetAvailBalAmt(acc,0)/100) > 100
               );

但是,不能将多个值分配给一个变量。您可以创建一个临时表或表变量:

声明@balances表(balance int); -或任何类型:

insert into @balances (balance)
    select dbo.GetAvailBalAmt(acc, 0) / 100
    from SMSCIF
    where (dbo.GetAvailBalAmt(acc,0)/100) > 100;