Gentili,
un cliente che usa il ns. gestionale basato su SqlServer riferisce di un'anomalia che occorre non più di 2-3 volte l'anno su un totale di 2-3000 movimenti, ma ogni anno, quando inserisce dei movimenti di magazzino.
Per inserire i movimenti di magazzino usiamo due stored procedure, una per l'inserimento della testata del movimento che ritorna l'Id e una a cui passiamo l'Id testata per generare le righe dello stesso.
Nella testata ci sono queste righe:
INSERT INTO dbo.magazzino (......) VALUES ()
SET @Id = SCOPE_IDENTITY();
Niente di nuovo.
Il problema è che sporadicamente l'id ritornato dallo SCOPE_IDENTITY() non è quello corretto, in quanto ritorna l'id di un altro movimento agganciando quindi tutte le righe di questa testata a quelle dell'altro movimento.
E' possibile un'evenienza del genere nel caso in cui più utenti salvino dei movimenti "nello stesso momento"? Ho cercato in Internet ma non ho trovato nulla di soddisfacente.
Secondo voi posso migliorare la situazione usando una transaction, es.
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO dbo.magazzino (......) VALUES ()
SET @Id = SCOPE_IDENTITY();
COMMIT TRANSACTION
END TRY
....
Ringrazio chiunque vorrà darmi una dritta o qualche link di approfondimento.
Buon weekend.
Lucius