Aracılığıyla paylaş


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.

Konu bağlantısı simgesiTransact-SQL sözdizimi 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 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