sql >> Database teknologi >  >> RDS >> Sqlserver

Opdater stort antal rækker - SQL Server 2005

Har du en indekseret identitetskolonne i måltabellen? Dette er et af de få tilfælde, hvor jeg faktisk godt kan lide at bruge en WHILE loop. Hovedproblemet med løsningen i det link, du postede, er dårligt indeksbrug.

    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 tilfælde, hvor du har en surrogatnøgle (identitetskolonne som primærnøgle), hvilket ikke er så ualmindeligt, ville dette forårsage en simpel indekssøgning på primærnøglen og kan justeres blot med vækstbeløbet (5000 i eksemplet)




  1. Sådan får du indsat værdi for trigger

  2. Få kolonnesum og brug til at beregne procent af totalen (mySQL)

  3. MySQL mysql_tzinfo_to_sql program

  4. MySQL multiplicerende underforespørgselsresultater