SQL Server - Problem z numeracją

0

Cześć
Mam taki problem
Procedura wbudowana

CREATE PROCEDURE Test
AS

BEGIN TRANSACTION

DECLARE @pNumer INT

SET @pNumer = (Select numer From t_numer Where rok = 2020)

SET @pNumer = @nUmer + 1

Update t_numer
SET numer = @pNumer
Where rok = 2020

COMMIT TRANSACTION

Pytanie
Jak zabezpieczyc żeby przy wywołaniu uniknąć sytuacji że 2 razy wywołana procedura
pobiera
pobiera
update
update
i w efekcie numer zwiększy mi się tylko o 1

Jestem początkujący więc proszę o wyrozumiałość
Pozdrawiam

0

masz błąd, używasz zmiennej @numer która nie jest zadeklarowana, może zanim będziesz zaczynał transakcje i martwil sie konkurencyjnym zapytaniami powiedz, dlaczego nie zrobiłeś tego w takim zapytaniu:

Update t_numer
SET numer = numer+1
Where rok = 2020
0

Bład przy pisaniu
Poprawiłem

CREATE PROCEDURE Test
AS

BEGIN TRANSACTION

DECLARE @pNumer INT

SET @pNumer = (Select numer From t_numer Where rok = 2020)

Update t_numer
SET numer = @pNumer + 1
Where rok = 2020

SELECT @pNumer + 1

COMMIT TRANSACTION

To jest prosty przykład i dlatego tak napisałem żeby nie wrzucać ogromnej procedury

0

Poczytaj o poziomach izolacji, sprawdź co robią gonty: HOLDLOCK i ROWLOCK przy selekcję.

Dodatkowo zapoznaj się z tym: https://www.mssqltips.com/sqlservertip/1257/processing-data-queues-in-sql-server-with-readpast-and-updlock/

1 użytkowników online, w tym zalogowanych: 0, gości: 1