APPLOCK_MODE(Transact-SQL)
특정 응용 프로그램 리소스에 대해 잠금 소유자가 보유한 잠금 모드를 반환합니다. APPLOCK_MODE는 응용 프로그램 잠금 함수이며 현재 데이터베이스에서 작동합니다. 응용 프로그램 잠금의 범위는 데이터베이스입니다.
구문
APPLOCK_MODE('database_principal','resource_name','lock_owner')
인수
'database_principal'
데이터베이스의 개체에 대한 사용 권한이 부여될 수 있는 사용자, 역할 또는 응용 프로그램 역할입니다. 함수를 성공적으로 호출하려면 이 함수의 호출자가 database_principal, dbo 또는 db_owner 고정 데이터베이스 역할의 멤버여야 합니다.'resource_name'
클라이언트 응용 프로그램이 지정한 잠금 리소스 이름입니다. 응용 프로그램은 리소스 이름이 고유한지 확인해야 합니다. 지정된 이름은 내부적으로 MicrosoftSQL Server 잠금 관리자에 저장될 수 있는 값으로 해시됩니다. resource_name은 **nvarchar(255)**이고 기본값은 없습니다. resource_name은 이진 비교되고 현재 데이터베이스의 데이터 정렬 설정에 관계없이 대/소문자를 구분합니다.'lock_owner'
잠금의 소유자이며 잠금이 요청된 때의 lock_owner 값입니다. lock_owner는 **nvarchar(32)**이며 값은 Transaction(기본값) 또는 Session입니다.
반환 형식
nvarchar(32)
반환 값
특정 응용 프로그램 리소스에 대해 잠금 소유자가 보유한 잠금 모드를 반환합니다. 잠금 모드는 다음 값 중 하나일 수 있습니다.
NoLock |
Update |
*SharedIntentExclusive |
IntentShared |
IntentExclusive |
*UpdateIntentExclusive |
Shared |
Exclusive |
|
*이 잠금 모드는 다른 잠금 모드의 조합이며 sp_getapplock을 사용하여 명시적으로 설정될 수 없습니다.
함수 속성
Nondeterministic
Nonindexable
Nonparallelizable
예
별도의 세션을 갖는 두 명의 사용자(사용자 A와 사용자 B)가 다음의 Transact-SQL 문 시퀀스를 실행합니다.
사용자 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
그런 다음 사용자 B는 다음을 실행합니다.
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
사용자 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