applock_test (Transact-SQL)
Olup olmadığı bir kilit belirli uygulama kaynak için belirtilen kilit sahibi kilitedinmeden verilebilir hakkında bilgi verir.applock_test bir uygulama kilit işlevolan ve geçerli veritabanında çalışır.Uygulama kilitleri kapsam veritabanıdır.
Sözdizimi
APPLOCK_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , 'lock_owner' )
Bağımsız değişkenler
'database_principal'
Kullanıcı, rol veya veritabanındaki nesneleri için izinleri verilebilir uygulama rolü olabilir.işlev çağıran bir üye olmanız database_principal, dbo, veya db_owner işlev başarıyla çağırmak için sabit veritabanı rolü .'resource_name'
kilitkaynak adı, istemci uygulama tarafından belirtilir. Uygulama kaynak benzersiz olduğundan emin olmalısınız.Belirtilen adı dahili olarak depolanabilir bir değer içine karıştırılır SQL Server kilit Yöneticisi.resource_name* *olan nvarchar(255) ile hiçbir varsayılan.resource_nameikili karşılaştırma ve durum-duyarlı, geçerli veritabanı harmanlama ayarları ne olursa olsun.'lock_mode'
Belirli bir kaynakalınabilmesi için kilit modudur.lock_modeİş nvarchar(32) ve hiçbir varsayılan değeri.Değer aşağıdakilerden biri olabilir: Shared, Update, IntentShared, IntentExclusive, Exclusive.'lock_owner'
Sahibi olan kilit, lock_owner değer kilit istendi.lock_owneris nvarchar(32).Değeri olabilir Transaction (varsayılan) veya Session.Varsayılan veya Transaction açıkça belirtilen, applock_test gerekir yürütülen karşı içinde hareket.
Dönüş Türleri
smallint
Dönüş Değeri
Belirtilen sahip için kilit verilemez, 0 döndürür ve kilit verilebilir 1 değerini döndürür.
İşlev özellikleri
Nondeterministic
Nonindexable
Nonparallelizable
Örnekler
Aşağıdaki örnekte, iki kullanıcı (User A ve User B) aşağıdaki sıralı çalıştırmak ayrı oturumlar ile Transact-SQL ifadeleri.
User Açalıştırır:
USE AdventureWorks2008R2;
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
User Bsonra çalıştırır:
Use AdventureWorks2008R2;
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
User Asonra çalıştırır:
EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';
GO
User Bsonra çalıştırır:
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: '1' (The lock is grantable.)
GO
User Ave User b çalıştırın:
COMMIT TRAN;
GO
Ayrıca bkz.