APPLOCK_MODE (Transact-SQL)
Belirli bir uygulama kaynak üzerinde kilit sahibi tarafından tutulan kilit modu) döndürür.Bir Uygulama kilit işlev APPLOCK_MODE; geçerli veritabanı için kullanılabilir.Uygulama kilitleri kapsamını veritabanıdır.
APPLOCK_MODE('database_principal','resource_name','lock_owner')
Bağımsız değişkenler
'database_principal'
Kullanıcı, role veya veritabanı nesneleri için izinleri verilen uygulama rolü belirtilir.Arayanın işlevinin bir üyesi olmanız gerekir database_principal, dbo, or the db_owner işlev başarıyla çağırmak için sabit veritabanı rolü.'resource_name'
Bir Kilit kaynak adı, istemci uygulaması tarafından belirtilen.Uygulama, kaynak adı benzersiz olduğundan emin olmalısınız.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.
Dönüş Türleri
nvarchar(32)
Return Value
Belirli bir uygulama kaynak üzerinde kilit sahibi tarafından tutulan kilit modu) döndürür.Kilit modu, bu değerlerin herhangi biri olabilir:
NoLock |
Güncelleştirme |
*SharedIntentExclusive |
IntentShared |
IntentExclusive |
*UpdateIntentExclusive |
Paylaşılan |
Özel kullanım |
|
* Bu kilit modu Kilitle modlardan bir birleşimidir ve kullanılarak açıkça kazanılması olamaz sp_getapplock.
Işlev ve özellikleri
Nondeterministic
Nonindexable
Nonparallelizable
Örnekler
Ayrı bir oturum ile iki kullanıcılar (Kullanıcı A ve kullanıcı B) aşağıdaki sıralı çalıştırın. Transact-SQL ifadeler.
A kullanıcısı'ı çalıştırır:
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
Sonra kullanıcı B çalıştırır:
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
Sonra da BIR çalışan kullanıcı:
EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';
GO
Sonra kullanıcı B çalıştırır:
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: '1' (The lock is grantable.)
GO
A kullanıcısı ve kullanıcı B sonra da her ikisini de çalıştırın:
COMMIT TRAN;
GO