Bardzo często zdarza się, że trzeba dokonać zmian na wielu milionach rekordów. Wykonując update czy delete na takiej ilości rekordów w ramach jednej transakcji doprowadzamy do sytuacji rozrostu loga transakcyjnego.
Oczywiście jeżeli byśmy takie operacje wykonywali małymi porcjami to powstało by dużo transakcji i po zakończeniu każdej z nich silnik sql serwera wstawiał by ponownie dane do loga transakcyjnego wykorzystując już zwolnione miejsca (Recovery model = SIMPLE)
Poniżej przedstawiam przykładowy kod:
use Foo
go
declare @i int =1
declare @x int=0
set rowcount 50000; -- będzie wykonywał update tylko na 50000 rekordów
while @i>0
begin
UPDATE Foo.dbo.Tabela
SET kolumna = wartosc
WHERE {predykat}
set @i=@@ROWCOUNT
set @x=@x+@i
end
set rowcount 0