SQL Server - Problem z numeracją

SQL Server - Problem z numeracją
P8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
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

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
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:

Kopiuj
Update t_numer
SET numer = numer+1
Where rok = 2020
P8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
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

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
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/

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.