Lock tabelle, non ci capisco nulla!!

giovedì 26 aprile 2007 - 16.40

sankyu Profilo | Senior Member

ciao a tutti ho questo problemino:
eseguo una stored che da una tabella di fatture ne prende una non usata e ne registra l'id in una variabile posto il codice per chiarezza

CREATE procedure prenota_ricevuta()
as
begin
Declare @id_ricevuta numeric
riprova:
begin tran
set @id_ricevuta =(select top 1 id_ricevuta from ricevute where stato_prenotato=0 order by id_ricevuta)
update ricevute set stato_prenotato=1 where id_ricevuta=@id_ricevuta
if @@error =0
begin
commit tran
end
else
begin
rollback tran
goto riprova
end
select @id_ricevuta
end

la mia paura è che due utenti eseguano la stored in contemporanea e quindi prenotino la stessa ricevuta il cui id deve essere poi stampato! vorrei evitare che esistano 2 ricevute con lo stesso id e non posso usare i valori autonumerici perchè devo sapere l'id di fattura prima che questa sia inserita e solo dopo aggiornare i valori di agenzia e transazione nella tabella ricevute.
mi è stato detto che dovrei usare i lock a libello di linea ma non capisco come si fa manco dalla msdn se qualcuno mi fa un esempio su questi lock ne sarei grato!
ciao a tutti e grazie

grancati Profilo | Newbie

>la mia paura è che due utenti eseguano la stored in contemporanea e quindi prenotino la stessa ricevuta

Ciao
sankyu,

serializza la stored procedure in modo da farla eseguire da un solo utente alla volta
----
sp_getapplock
http://msdn2.microsoft.com/en-us/library/aa933410(SQL.80).aspx
----

un apprfondimento
----
Serializing Procedure Calls Without Uneccesssary Blocking
http://www.sqlservercentral.com/columnists/rcary/2649.asp
----

Ciao
Giorgio
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5