我是存储过程的新手。我想将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
答案 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;