Witam,
Mam taki fragment procedury SQL. Generalnie odczytuję jakiś licznik i zwiększam go o 1.
DECLARE
@nr int,
@year int,
@pref nchar(5);
BEGIN TRAN T1;
SELECT @nr = LSTNUMBER, @pref= PREFIX, @year=LSTYEAR
FROM SER.LASTNMBR
WHERE IDSTATUS = @Typ;
UPDATE SER.LASTNMBR SET LSTNUMBER = @nr + 1 WHERE IDSTATUS = @Typ;
COMMIT TRAN T1;
SELECT @nr
"Przetworzyłem" nią blisko 300 tyś. rekordów. Ale teraz zdarzyło się, że zostały wygenerowane dwa takie same numery.
Co jest z tym kodem źle?
Czy będzie lepiej jak zrobię:
UPDATE SER.LASTNMBR SET LSTNUMBER = LSTNUMBER + 1 WHERE IDSTATUS = @Typ;
Ponieważ cały kod jest w transakcji to nie powinno być różnicy.