sql >> Database >  >> RDS >> Sqlserver

Update groot aantal rijen - SQL Server 2005

Heeft u een geïndexeerde identiteitskolom in de doeltabel? Dit is een van de weinige gevallen waarin ik echt graag een WHILE-lus gebruik. Het grootste probleem met de oplossing in de link die je hebt gepost, is slecht indexgebruik.

    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

In gevallen waarin u een surrogaatsleutel heeft (identiteitskolom als primaire sleutel), wat niet zo ongewoon is, zou dit een eenvoudige indexzoekactie op de primaire sleutel veroorzaken en is eenvoudig aan te passen door het groeibedrag (5000 in het voorbeeld)




  1. SQL-gedefinieerde functie aanroepen in C #

  2. Datums tussen een reeks datums ophalen

  3. Wat doet select 1 van?

  4. Laravel 5 gebruikt OR-conditie met BETWEEN