Update SQL with consecutive numbering

前端 未结 10 540
庸人自扰
庸人自扰 2020-12-02 20:16

I want to update a table with consecutive numbering starting with 1. The update has a where clause so only results that meet the clause will be renumbered. Can I accomplish

相关标签:
10条回答
  • 2020-12-02 20:46

    I've used this technique for years to populate ordinals and sequentially numbered columns. However I recently discovered an issue with it when running on SQL Server 2012. It would appear that internally the query engine is applying the update using multiple threads and the predicate portion of the UPDATE is not being handled in a thread-safe manner. To make it work again I had to reconfigure SQL Server's max degree of parallelism down to 1 core.

    EXEC sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    EXEC sp_configure 'max degree of parallelism', 1;
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    
    DECLARE  @id int
    SET @id = -1
    UPDATE dbo.mytable
    SET @id = Ordinal = @id + 1
    

    Without this you'll find that most sequential numbers are duplicated throughout the table.

    0 讨论(0)
  • 2020-12-02 20:48

    If you want to create a new PrimaryKey column, use just this:

    ALTER TABLE accounts ADD id INT IDENTITY(1,1) 
    
    0 讨论(0)
  • 2020-12-02 20:51

    It is possible, but only via some very complicated queries - basically you need a subquery that counts the number of records selected so far, and uses that as the sequence ID. I wrote something similar at one point - it worked, but it was a lot of pain.

    To be honest, you'd be better off with a temporary table with an autoincrement field.

    0 讨论(0)
  • 2020-12-02 20:54

    This probably depends on your database, but here is a solution for MySQL 5 that involves using a variable:

    SET @a:=0;
    UPDATE table SET field=@a:=@a+1 WHERE whatever='whatever' ORDER BY field2,field3
    

    You should probably edit your question and indicate which database you're using however.

    Edit: I found a solution utilizing T-SQL for SQL Server. It's very similar to the MySQL method:

    DECLARE @myVar int
    SET @myVar = 0
    
    UPDATE
      myTable
    SET
      @myvar = myField = @myVar + 1
    
    0 讨论(0)
提交回复
热议问题