applock_test (Transact-sql)
Olup olmadığını bir kilit belirli uygulama kaynak için belirtilen kilit sahibi olmadan kilidi alınıyor verilebilir hakkında bilgi verir. applock_test bir uygulama kilidi fonksiyonu, ve geçerli veritabanında çalışır. Uygulama kilitleri kapsamı veritabanıdır.
Transact-SQL Sözdizim Kuralları
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 izinler verilebilen uygulama rolü olduğunu. İşlevi çağıran bir üyesi olmanız database_principal, dbo, ya da db_owner işlevi başarıyla çağırmak için sabit veritabanı rolü.'resource_name'
Kilit kaynak adı, istemci uygulaması tarafından belirtilir. Uygulama kaynağı benzersiz olduğundan emin olmalısınız. Belirtilen adı dahili olarak içine saklanabilir bir değer sağlaması SQL ServerKilit Yöneticisi. resource_name* *ise nvarchar(255)hiçbir varsayılan ile. resource_nameikili karşılaştırılır ve büyük küçük harf duyarlı, geçerli veritabanı harmanlama ayarları ne olursa olsun.'lock_mode'
Belirli bir kaynak için elde edilebilir için kilit modudur. lock_modeise nvarchar(32)ve varsayılan değeri yok. Değeri aşağıdakilerden biri olabilir: Paylaşılan, güncelleştirme, IntentShared, IntentExclusive, özel.'lock_owner'
Sahibi olan kilit, lock_ownerdeğeri kilit istendiğinde. lock_owneris nvarchar(32). Değer-ebilmek var olmak hareket (varsayılan) veya oturum. Eğer varsayılan veya hareket açıkça belirtilirse, applock_test gereken yürütülen gelen bir hareket içinde.
Dönüş Türleri
smallint
Dönüş Değeri
Kilidi belirtilen sahibine verilemez 0 döndürür ve kilit verilebilecek 1 değerini döndürür.
Fonksiyon özellikleri
Nondeterministic
Nonindexable
Nonparallelizable
Örnekler
Aşağıdaki örnekte, iki kullanıcı (Kullanıcı a ve Kullanıcı b) ayrı oturumlar aşağıdaki sıra çalıştırmak Transact-SQLdeyimleri.
Kullanıcı a çalıştırır:
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
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
Kullanıcı b sonra çalıştırır:
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
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
Kullanıcı a sonra çalıştırır:
EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';
GO
EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';
GO
Kullanıcı b sonra çalıştırır:
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: '1' (The lock is grantable.)
GO
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: '1' (The lock is grantable.)
GO
Kullanıcı a ve Kullanıcı b hem çalıştırırsanız:
COMMIT TRAN;
GO
COMMIT TRAN;
GO