Udostępnij za pośrednictwem


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.

Topic link iconKonwencje składni języka Transact-SQL

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