讨厌但是这个脚本是否在SQL Server 2008上运行

时间:2016-06-29 14:05:45

标签: sql-server sql-server-2008 tsql

Declare @Table table (RowNumber int, Increment int, Score int)

Insert into @Table 
values (1, 1, NULL), (2, 100000, NULL), (3, -1, NULL), 
       (4, 1, NULL), (5, 10, NULL), (6, -1, NULL), 
       (7, -100000, NULL), (8, -10, NULL)

Update @Table 
Set Score = B.Score
From  @Table A 
Join (Select RowNumber, Score = sum(Increment) over (Order By RowNumber) 
      from @Table) B on A.RowNumber = B.RowNumber

Select * from @Table

返回

  RowNumber Increment       score
    1           1           1
    2           100000      100001
    3           -1          100000
    4           1           100001
    5           10          100011
    6           -1          100010
    7           -100000     10
    8           -10         0

2 个答案:

答案 0 :(得分:7)

我刚刚更新了您的UPDATE声明,试一试这会给出您在问题中描述的预期结果

UPDATE @Table SET Score=(SELECT SUM(Increment) 
                          FROM  @Table B 
                          WHERE  b.RowNumber <= A.RowNumber)
FROM @Table A 

答案 1 :(得分:7)

原始问题的答案是:否。

此查询不在SQL Server 2008上运行。

仅在SQL Server 2012中实施了累积SUMORDER BY的{​​{1}}子句中的OVER

SUM

您将收到此隐秘错误消息:

  

Msg 11305,Level 15,State 10,Line 11

     

并行数据仓库   (PDW)功能未启用。

即使兼容级别设置为SQL Server 2008(100),它也将在SQL Server 2012+上运行。