【发布时间】:2018-01-25 13:41:51
【问题描述】:
我有这个代码:
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
'
我需要检索所有这些值。
请注意,我不知道临时表会返回多少行,并且说只声明第二个变量是行不通的。这样做的重点是最终将这些变量作为输入参数传递给函数。
【问题讨论】:
-
如果您需要表中的所有值,为什么要将表变量重新分配给另一个变量?此外,这不是临时表。那是在 SQL 中具有不同属性和规则的不同对象。不要混淆它们。
-
你需要这些值来做什么?
-
SELECT Amount FROM @GetTotalPaymentAmount为您获取多个货币总和,如果您想要特定货币添加 where 子句以将其过滤到 1 行,否则如果您想处理每一行,则必须遍历它们一次。 -
您很可能不需要需要循环播放。如果你解释你想用这些值做什么,我几乎可以保证你可以通过基于集合的操作来做到这一点。
-
@So_oP 。 . .您拥有表中的所有值。只需使用
@GetTotalPaymentAmount。
标签: sql sql-server tsql rdbms