sql >> Base de Datos >  >> RDS >> Sqlserver

Actualizar gran cantidad de filas - SQL Server 2005

¿Tiene una columna de identidad indexada en la tabla de destino? Este es uno de los pocos casos en los que realmente me gusta usar un bucle WHILE. El problema principal con la solución en el enlace que publicaste es el mal uso del índice.

    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

En los casos en los que tenga una clave sustituta (columna de identidad como clave principal), lo que no es tan raro, esto provocaría una búsqueda de índice simple en la clave principal y se puede ajustar simplemente por la cantidad de crecimiento (5000 en el ejemplo)