Share via


applock_mode (Transact-SQL)

Belirli uygulama kaynaküzerindeki kilit sahibi tarafından tutulan kilit modu döndürür.applock_mode 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_MODE( 'database_principal' , 'resource_name' , '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 adı 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_owner'
    Sahibi olan kilit, lock_owner değer kilit istendi.lock_ownerİş nvarchar(32), ya da değer olabilir ve 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 bu değerlerden biri olabilir:

NoLock

Update

*SharedIntentExclusive

IntentShared

IntentExclusive

*UpdateIntentExclusive

Shared

Exclusive

 

* Bu kilit modu kilit modlardan birleşimidir ve açıkça kullanarak alınamıyor sp_getapplock.

İşlev özellikleri

Nondeterministic

Nonindexable

Nonparallelizable

Örnekler

İki 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