applock_test (Transact-sql)
Belirli uygulama kaynak üzerindeki kilit sahibi tarafından tutulan kilit modu döndürür. 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_MODE( 'database_principal' , 'resource_name' , '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_ownersabit veritabanı rolü başarıyla işlevi çağırmak için.'resource_name'
Kilit kaynak adı, istemci uygulaması tarafından belirtilir. Uygulama kaynak adının 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 geçerli veritabanı harmanlama ayarlarına bakılmaksızın duyarlıdır.'lock_owner'
Sahibi olan kilit, lock_ownerdeğeri kilit istendiğinde. lock_ownerise nvarchar(32), ve değer-ebilmek var olmak ya da Transaction(varsayılan) veya Session.
Dönüş Türleri
nvarchar(32)
Dönüş Değeri
Belirli uygulama kaynak üzerindeki kilit sahibi tarafından tutulan kilit modu döndürür. Kilit modu, aşağıdaki değerlerden herhangi biri olabilir:
NoLock |
Update |
*SharedIntentExclusive |
IntentShared |
IntentExclusive |
*UpdateIntentExclusive |
Shared |
Exclusive |
|
* Bu kilit modu kilit modlardan birleşimidir ve açıkça kullanarak elde edemez sp_getapplock.
Fonksiyon özellikleri
Nondeterministic
Nonindexable
Nonparallelizable
Örnekler
İki kullanıcı ( User A ve User B) ayrı oturumlar aşağıdaki sıra çalıştırmak Transact-SQLdeyimleri.
User 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
User Bsonra ç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
User Asonra çalıştırır:
EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';
GO
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
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
COMMIT TRAN;
GO