patternsqlMinor
Can I tell SQL Server to "do something" when a connection is closed?
Viewed 0 times
cansqlclosedtellwhenserversomethingconnection
Problem
Can I tell SQL Server to "do something" (e.g. release an application-level lock) when the connection is closed for whatever reason?
Background: I want to lock a record on the application level, not on the database level. However, I'm having trouble releasing the lock when the application crashes. Basically, I am implementing the following algorithm in my application:
I'm trying to find out if there is an easy way to get rid of the application-level lock when the connection crashes.
Background: I want to lock a record on the application level, not on the database level. However, I'm having trouble releasing the lock when the application crashes. Basically, I am implementing the following algorithm in my application:
function editRecord(recordId):
begin transaction
if (select lockedBy from myTable where id = recordId) is not empty:
commit
show "Sorry, record already in use by ..."
else
update myTable set lockedBy = current_user() where id = recordId
commit
show UI window to let user edit and update record
update myTablet set lockedBy = empty where id = recordIdI'm trying to find out if there is an easy way to get rid of the application-level lock when the connection crashes.
Solution
SQL Server provides a built-in mechanism to support application locking. The locks supported are Shared, Update, IntentShared, IntentExclusive, and Exclusive. Deadlock detection is also built-in, though application lock deadlocks do not terminate the active transaction - you need to check the result code returned from the system procedure call. Books Online documentation:
APPLOCK_MODE
APPLOCK_TEST
sp_getapplock
sp_releaseapplock
Locks associated with the session are automatically released when the session is logged out.
Community Wiki answer generated from a question comment by @JonSeigel
APPLOCK_MODE
APPLOCK_TEST
sp_getapplock
sp_releaseapplock
Locks associated with the session are automatically released when the session is logged out.
Community Wiki answer generated from a question comment by @JonSeigel
Context
StackExchange Database Administrators Q#43979, answer score: 5
Revisions (0)
No revisions yet.