LOCK SQL SERVER 2005

giovedì 08 settembre 2011 - 13.04
Tag Elenco Tags  SQL Server 2005

WELLNET Profilo | Newbie

RISOLTO
Salve a tutti.
Devo simulare la select IDENTITY di un ID da una tabella parametri + il suo incremento in maniera protetta rispetto agli accessi concorrenti.
Ho sentito parlare dei LOCK di sql server. Quello che dovrei fare io è

LOCK
SELECT VALORE FROM TABELLA
UPDATE TABELLA SET VALORE = VALORE + 1
END LOCK

L'utente che tenta di leggere il VALORE durante l'operazione di UPDATE deve essere in qualche modo essere messo in attesa che l'update sia stato fatto.
Qualche suggerimento in merito? Che tipi di lock devo utilizzare?

Grazie
Fabrizio

RISOLTO:
Ho fatto un test con 2 query aperte (IL WAITFOR L'HO MESSO PER SIMULARE LA CONTEMPORANEITA'):
1) BEGIN TRANSACTION t1
SELECT VALORE FROM TABELLA WITH (rowlock , xlock , holdlock) WHERE CHIAVE = 'COUNT'
WaitFor Delay '00:00:10'
UPDATE TABELLA SET VALORE = VALORE + 1 WHERE CHIAVE = 'COUNT'
COMMIT TRANSACTION t1
2) SELECT VALORE FROM TABELLA WHERE CHIAVE = 'COUNT'

Lanciando prima la 1) e la 2) subito dopo vedo che la 2) aspetta che la prima concluda (restituendo VALORE) prima di restituire il nuovo VALORE + 1.
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5