在 table 更新语句中设置变量

Setting variable inside table update statement

TempTable 有列 RunningTotalClientCount,我们还声明了 @RunningTotal 变量并将其设置为 0。

谁能解释一下这条线的作用?

UPDATE Temptable 
SET @RunningTotal = RunningTotal = @RunningTotal + ClientCount

以前从未见过这种结构,但它似乎是这样工作的。 它用 ClientCount.

的累计总数填充列 RunningTotal

假设我们从 table 开始,只填充了 ClientCount

CREATE TABLE dbo.Temptable (ClientCount int, RunningTotal int)
INSERT INTO Temptable (ClientCount) VALUES (5), (4), (6), (2)
SELECT * FROM Temptable

ClientCount RunningTotal
----------- ------------
5           NULL
4           NULL
6           NULL
2           NULL

然后运行更新语句:

DECLARE @RunningTotal int = 0
UPDATE Temptable SET @RunningTotal = RunningTotal = @RunningTotal + ClientCount
SELECT * FROM Temptable

ClientCount RunningTotal
----------- ------------
5           5
4           9
6           15
2           17

如您所见,RunningTotal 的每个值都是当前记录和之前记录中所有 ClientCount 值的总和。

缺点是,您无法控制记录的处理顺序。这让我想知道这是否是在生产环境中推荐的方法。

请查看此处进行更深入的讨论: Calculate a Running Total in SQL Server