APPLOCK_TEST (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Эта функция возвращает сведения о том, может ли быть предоставлена блокировка конкретного ресурса приложения для указанного владельца блокировки без запроса на блокировку. Функция блокировки приложения APPLOCK_TEST действует в текущей базе данных. База данных является областью блокировок приложений.

Соглашения о синтаксисе Transact-SQL

Синтаксис

APPLOCK_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , 'lock_owner' )  

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

'database_principal'
Пользователь, роль или роль приложения, которым могут быть предоставлены разрешения на доступ к объектам базы данных. Для успешного вызова функции вызывающий ее объект должен быть членом предопределенной роли базы данных database_principal, dbo или db_owner.

'resource_name'
Имя ресурса блокировки, указанное клиентским приложением. Приложение должно гарантировать уникальность имени ресурса. Указанное имя хэшируется внутри значения, которое диспетчер блокировки SQL Server может хранить внутри. Аргумент resource_name имеет тип nvarchar(255) и не имеет значения по умолчанию. Аргумент resource_name сравнивается в двоичном режиме с учетом регистра символов независимо от параметров сортировки текущей базы данных.

'lock_mode'
Режим блокировки, который нужно получить для определенного ресурса. Аргумент lock_mode имеет тип nvarchar(32) и не имеет значения по умолчанию. lock_mode может иметь одно из следующих значений: Shared, Update, IntentShared, IntentExclusive, Exclusive.

'lock_owner'
Владелец блокировки, которая имеет значение lock_owner на момент запроса блокировки. Аргумент lock_owner имеет тип nvarchar(32) и может иметь значение Transaction (по умолчанию) или Session. Если явно указано значение по умолчанию или Transaction, APPLOCK_TEST должно выполняться из транзакции.

Типы возвращаемых данных

smallint

Возвращаемое значение

Значение 0, когда блокировка не может быть предоставлена указанному владельцу, или значение 1, если блокировка может быть предоставлена.

Свойства функции

Nondeterministic

Nonindexable

Nonparallelizable

Примеры

Два пользователя (А и Б) с отдельными сеансами запускают приведенную ниже последовательность инструкций Transact-SQL.

Пользователь А выполняет следующее:

USE AdventureWorks2022;  
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  

Затем пользователь Б выполняет следующее:

Use AdventureWorks2022;  
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  

Затем пользователь А выполняет следующее:

EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';  
GO  

Затем пользователь Б выполняет следующее:

SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');  
--Result set: '1' (The lock is grantable.)  
GO  

Затем оба пользователя (А и Б) выполняют следующее:

COMMIT TRAN;  
GO  

См. также

APPLOCK_MODE (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)