sql >> Databasteknik >  >> RDS >> Sqlserver

Uppdatera stort antal rader - SQL Server 2005

Har du en indexerad identitetskolumn i måltabellen? Det här är ett av få fall där jag faktiskt gillar att använda en WHILE-loop. Det största problemet med lösningen i länken du postade är dålig indexanvändning.

    DECLARE @START INT, @FINISH INT, @LOOPEND INT
    SELECT @START = 1, @FINISH = 5000, @LOOPEND = MAX(ID)
    from Bla 

    WHILE @START <= @LOOPEND
    BEGIN
        update a
        set XML = b.xml
        from Bla as a
        inner join #temp as b on a.i = b.i
        WHERE a.ID BETWEEN @START AND @FINISH

        SET @START = @FINISH + 1
        SET @FINISH = @FINISH + 5000
    END

I de fall du har en surrogatnyckel (identitetskolumn som primärnyckel), vilket inte är så ovanligt, skulle detta orsaka en enkel indexsökning på primärnyckeln och kan justeras helt enkelt med tillväxtbeloppet (5000 i exemplet)




  1. MySQL:PÅ UPPDATERING CASCADE för ett enkelt tabell-id|förälder|text, inte möjligt?

  2. SQL Server AlwaysOn ( Availability Group ) Arkitektur och steg för steg installation -1

  3. Alternativ för dynamiska vyer i mySQL

  4. Hur man skapar en vy i SQL Server