在 table 更新语句中设置变量
Setting variable inside table update statement
TempTable
有列 RunningTotal
和 ClientCount
,我们还声明了 @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
TempTable
有列 RunningTotal
和 ClientCount
,我们还声明了 @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