在表更新语句中设置变量

时间:2015-10-02 11:01:22

标签: sql-server tsql sql-update

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

有人可以解释一下这行是做什么的吗?

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

1 个答案:

答案 0 :(得分:0)

之前从未见过这个构造,但它似乎像这样工作。 它会填充RunningTotal列,累计总数为ClientCount

假设我们从填充了RunningTotal的表开始:

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

然后运行update语句:

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