sql-servert-sql

Update SQL with consecutive numbering


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 this efficiently without using a temp table?


Solution

  • 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