Witam
Ostatnio jakaś stara procedura na serwerze SQL Server 2005 gdzieś tam u klienta zaczęła sypać złe wyniki (jakiś stary system oparty na logice w procedurach) . Na serwerze miałem procedurę, w której pobierane są dane z widoku do kursora. W pętli, która przechodzi po kursorze realizowana jest operacja update. Co każde wywołanie procedury otrzymywałem inne wyniki.
Z lenistwa nie chciało mi się przerabiać kodu by nie używać kursora. Dodatkowo nie było czasu na zgłębianie się w logikę.

Kombinowałem, że dane do widoku nie są po prostu ładowane, że gdzieś tabele są wykorzystywane w jakich operacjach i następuje jakaś blokada, ale jednak nie. Problem leżał w kursorze. Widok zwracał dobre dane, ale kursor jakby nie przechodził po wszystkich wierszach, czasami część zwyczajnie omijał. Nie było w tym jakieś powtarzalności po prostu raz nie brał tych pod uwagę raz innych.

Po dodaniu opcji FAST_FORWARD do kursora i... błąd zniknął. I tutaj dochodzi moje pytanie. O ile mi wiadomo jest to opcja mająca wpływ jedynie na wydajność. Rozwiązałem zadanie, ale ciekawi mnie przyczyna takiego zachowania procedury z kursorem. Nie mam pomysłu dlaczego akurat ta instrukcja okazała się skuteczna. Szukam jakiegoś sensownego wytłumaczenia w czym był problem.

Pozdrawiamm