Share via


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.

Konu bağlantısı simgesi 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

Ayrıca bkz.

Başvuru

applock_test (Transact-sql)

sp_getapplock (Transact-sql)

sp_releaseapplock (Transact-sql)