【问题标题】:SQL Server Incrementing a counter in UpdateSQL Server 在更新中增加一个计数器
【发布时间】:2011-07-22 03:18:10
【问题描述】:

每当我更改行时,我都会更新一些列并增加一个计数器。

更新语句是连接的结果(下面的简化代码):

update @to
    set
        t.num += 1
    from @to t
    join @source s
        on t.id = s.id

当我不止一次更新一行时,列会保存最后一个值(应该如此),但计数器只增加一次。因此,如果连接返回 (id = 1, id = 1),我的表将保存 (id = 1, num = 1) 而不是 (id = 1, num = 2)。

有一些方法可以解决这个问题(例如,另一个加入选择计数),但我想知道是否有办法让它保持简单。

【问题讨论】:

    标签: sql sql-server sql-server-2008 sql-update


    【解决方案1】:

    实际上没有办法在不获取计数的情况下获取计数。这是一种方法(仍然只引用一次@source):

    ;WITH s AS
    (
      SELECT id, c = COUNT(*)
        FROM @source 
        GROUP BY id
    )
    UPDATE t SET t.num += s.c
      FROM @to AS t
      INNER JOIN s
      ON t.id = s.id;
    

    希望以@source 结尾的行已被过滤到仅在@to 中也可以找到的行。如果没有,您可以在初始 CTE 中添加更多条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多