我有这段代码:
DECLARE @TotalPayment DECIMAL(18,4)
DECLARE @GetTotalPaymentAmount AS TABLE
(
Amount DECIMAL(18,4),
CurrencyId CHAR(3)
)
INSERT INTO @GetTotalPaymentAmount
SELECT SUM(Amount), CurrencyId
FROM [dbo].[fn_DepositWithdrawReport]()
WHERE OperationTypeId = 2
GROUP BY CurrencyId
SET @TotalPayment = (SELECT Amount FROM @GetTotalPaymentAmount)
我收到此错误
子查询返回的值超过1。
所以是的,我知道SET逻辑中的问题,因为@GetTotalPayment
返回多行。如果我使用例如TOP 1
,它工作得很好,但我需要该表的所有值。我怎样才能获得所有值并将它们分配给该表中的局部变量?
我正在接受这样的表格
A 'C
---'---
10 'USD
20 'EURO
'
我需要检索所有这些值。
请注意,我不知道从临时表中返回多少行,并说只是声明第二个变量不起作用。这一点的最后一点是最终将这些变量作为输入参数传递。
答案 0 :(得分:0)
在这里,我稍微修改了你的代码。应该工作:)
DECLARE @TotalPayment DECIMAL(18,4)
DECLARE @GetTotalPaymentAmount AS TABLE
(
Id int identity(1,1),--added Id column
Amount DECIMAL(18,4),
CurrencyId CHAR(3)
)
INSERT INTO @GetTotalPaymentAmount
SELECT SUM(Amount),CurrencyId
FROM [dbo].[fn_DepositWithdrawReport]()
WHERE OperationTypeId = 2
GROUP BY CurrencyId
declare @i int, @cnt int
set @i = 1
select @cnt = COUNT(*) from @GetTotalPaymentAmount
while @i <= @cnt
begin
select @TotalPayment = Amount from @GetTotalPaymentAmount where Id = @i
--do stuff with retrieved value
@i += 1
end
答案 1 :(得分:0)
@So_Op
如果您希望数据在SCALAR
函数中使用,那么只需执行此操作
SELECT
G.Amount
,dbo.FN_ScalarFunction(G.Amount)
FROM
@GetTotalPaymentAmount G
如果它是TABLE
函数,则可以使用
SELECT
G.Amount
,F.ReturnValue
FROM
@GetTotalPaymentAmount G
CROSS APPLY
dbo.FN_TableFunction(G.Amount) F