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.

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

Ayrıca bkz.

Başvuru

applock_test (Transact-sql)

sp_getapplock (Transact-sql)

sp_releaseapplock (Transact-sql)