다음을 통해 공유


APPLOCK_TEST(Transact-SQL)

지정된 잠금 소유자가 특정 응용 프로그램 리소스에 대한 잠금을 획득할 수 있는지에 대한 정보를 반환합니다. 실제로 잠금을 획득하지는 않습니다. APPLOCK_TEST는 응용 프로그램 잠금 함수이며 현재 데이터베이스에 대해 작동합니다. 응용 프로그램 잠금의 범위는 데이터베이스입니다.

항목 링크 아이콘 Transact-SQL 구문 표기 규칙

구문

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

인수

  • ' database_principal '
    데이터베이스의 개체에 대한 사용 권한이 부여될 수 있는 사용자, 역할 또는 응용 프로그램 역할입니다. 함수를 성공적으로 호출하려면 이 함수의 호출자가 database_principal, dbo 또는 db_owner 고정 데이터베이스 역할의 멤버여야 합니다.

  • ' resource_name '
    클라이언트 응용 프로그램이 지정한 잠금 리소스의 이름입니다. 응용 프로그램은 리소스가 고유한지 확인해야 합니다. 지정된 이름은 SQL Server 잠금 관리자에 저장할 수 있는 값으로 내부적으로 해시됩니다. resource_name은 nvarchar(255)이며 기본값은 없습니다. resource_name은 이진 비교되며 현재 데이터베이스의 데이터 정렬 설정에 관계없이 대/소문자를 구분합니다.

  • ' lock_mode '
    특정 리소스에 대해 획득할 잠금 모드입니다. lock_mode는 nvarchar(32)이며 기본값은 없습니다. 값은 Shared, Update, IntentShared, IntentExclusiveExclusive 중 하나일 수 있습니다.

  • ' lock_owner '
    잠금의 소유자이며 잠금이 요청될 때 lock_owner 값입니다. lock_owner는 nvarchar(32)입니다. 값은 Transaction(기본값) 또는 Session일 수 있습니다. 기본값 또는 Transaction이 명시적으로 지정되면 APPLOCK_TEST는 트랜잭션 내에서 실행해야 합니다.

반환 유형

smallint

반환 값

지정된 소유자에게 잠금을 허용할 수 없는 경우 0, 잠금을 허용할 수 있는 경우 1을 반환합니다.

함수 속성

Nondeterministic

Nonindexable

Nonparallelizable

다음 예에서는 별도의 세션을 갖는 두 명의 사용자(사용자 A사용자 B)가 다음 Transact-SQL 문 시퀀스를 실행합니다.

사용자 A는 다음을 실행합니다.

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

그런 다음 사용자 B가 다음을 실행합니다.

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

사용자 A는 다음을 실행합니다.

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

그런 다음 사용자 B가 다음을 실행합니다.

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

사용자 A사용자 B가 모두 다음을 실행합니다.

COMMIT TRAN;
GO

참고 항목

참조

APPLOCK_MODE(Transact-SQL)

sp_getapplock(Transact-SQL)

sp_releaseapplock(Transact-SQL)