APPLOCK_MODE (Transact-SQL)
Zwraca w trybie blokada utrzymywane przez właściciela blokad dla zasób aplikacji.APPLOCK_MODE to funkcja blokada aplikacji i działa w bieżącej bazie danych.Zakres blokady aplikacji jest bazą danych.
APPLOCK_MODE('database_principal','resource_name','lock_owner')
Argumenty
'database_principal'
Jest to użytkownik, rola lub rola aplikacji, które mogą być przyznane uprawnienia do obiektów w bazie danych.Wywołujący funkcja musi być członkiem database_principal, dbo, or the db_owner ustalić rola bazy danych w celu wywołania funkcja pomyślnie.'resource_name'
Nazwa zasób blokada jest określony przez aplikację klient.Aplikacja musi upewnij się, że nazwa zasób jest unikatowa.The specified name is hashed internally into a value that can be stored in the Microsoft SQL Server lock manager.resource_name is nvarchar(255) with no default.resource_name is binary compared, and is case-sensitive regardless of the collation settings of the current database.'lock_owner'
Is the owner of the lock, which is the lock_owner value when the lock was requested.lock_owner is nvarchar(32), and the value can be either Transaction (the default) or Session.
Zwracane typy
nvarchar(32)
Return Value
Zwraca w trybie blokada utrzymywane przez właściciela blokad dla zasób aplikacji.Tryb blokada może być jeden z następujących wartości:
NoLock |
Aktualizacja |
*SharedIntentExclusive |
IntentShared |
IntentExclusive |
*UpdateIntentExclusive |
Udostępnione |
Wyłączne |
|
* Ten tryb blokada jest kombinacją innych trybów blokada i nie może być jawnie nabyta za pomocą sp_getapplock.
Funkcja właściwości
Nondeterministic
Nonindexable
Nonparallelizable
Przykłady
Dwóch użytkowników (użytkownik A i B użytkownika) z oddzielnych sesji uruchomienia następującej sekwencji Transact-SQL instrukcje.
Użytkownik A działa:
USE AdventureWorks;
GO
BEGIN TRAN;
DECLARE @result int;
EXEC @result=sp_getapplock
@DbPrincipal='public',
@Resource='Form1',
@LockMode='Shared',
@LockOwner='Transaction';
SELECT APPLOCK_MODE('public', 'Form1', 'Transaction');
GO
Następnie użytkownik B uruchomiony zostanie:
Use AdventureWorks;
GO
BEGIN TRAN;
SELECT APPLOCK_MODE('public', 'Form1', 'Transaction');
--Result set: NoLock
SELECT APPLOCK_TEST('public', 'Form1', 'Shared', 'Transaction');
--Result set: 1 (Lock is grantable.)
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: 0 (Lock is not grantable.)
GO
Użytkownik uruchamia wtedy:
EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';
GO
Następnie użytkownik B uruchomiony zostanie:
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: '1' (The lock is grantable.)
GO
Użytkownik A użytkownik B a jednocześnie uruchomić:
COMMIT TRAN;
GO