【问题标题】:How can I update all rows in a table and increment a column?如何更新表中的所有行并增加一列?
【发布时间】:2012-07-29 08:51:58
【问题描述】:

我在 SQL Server 2008 数据库中有一个表。我需要更新特定列的值,但同时增加它的值。解释:

如果表是:

CREATE TABLE [dbo].[Player]
(
    [PlayerID] [uniqueidentifier] NOT NULL,
    [UnitID] [uniqueidentifier] NULL,
    [ExerciseID] [uniqueidentifier] NOT NULL,
    [Designation] [nvarchar](256) NOT NULL
)

我想遍历具有ExerciseID 或42C45D73-3FE6-4AFA-8E2F-09BDFC6CBDF7 的每一行,并将Designation 更新为Player - X,但X 应该从1 开始,并且每次都增加1。

所以第一个要更新的玩家是Player - 1,第二个是Player - 2,以此类推。

我不知道从哪里开始这样的事情!

谢谢

【问题讨论】:

  • 如何确定第一个玩家?最低玩家ID?随机的?另外,X 不应该从 1 而不是 0 开始吗​​?
  • 大声笑,我喜欢你的名字 :) 更新我的问题,说它应该从 1 开始。我不介意哪个是第一个玩家,这根本不重要,只要每个玩家有不同的名字!我只是想清理我拥有的大约 8m 行的数据库......不忍心一一浏览它们!

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


【解决方案1】:
; with numbering as (
  select PlayerID,
         UnitID,
         ExerciseID,
         Designation,
         row_number () over (order by PlayerID) - 1 rn
    from Player
   where ExerciseID = '42C45D73-3FE6-4AFA-8E2F-09BDFC6CBDF7'
)
update numbering
   set Designation = 'Player - ' + convert(varchar(10), rn)

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多