
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 |