Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Bu fonksiyon, kilit sahibinin belirli bir uygulama kaynağında tuttuğu kilit modunu geri döndürür. Bir uygulama kilidi fonksiyonu olarak, APPLOCK_MODE mevcut veritabanında çalışır. Veritabanı, uygulama kilitlerinin kapsamıdır.
Transact-SQL söz dizimi kuralları
Sözdizimi
APPLOCK_MODE( 'database_principal' , 'resource_name' , 'lock_owner' )
Arguments
'database_principal'
Veritabanındaki nesnelere izin verilebilecek kullanıcı, rol veya uygulama rolü. Fonksiyonu başarılı bir şekilde çağırmak için, fonksiyon çağıran kişi database_principal, dbo veya db_owner sabit veritabanı rolünün bir üyesi olmalıdır.
'resource_name'
İstemci uygulaması tarafından belirtilen bir kilit kaynak adı. Uygulama, benzersiz bir kaynak adı sağlamalıdır. Belirtilen isim, SQL Server kilit yöneticisinin dahili olarak depolayabileceği bir değere dahili olarak hash edilir.
resource_namenvarchar(255)'dir ve varsayılan yoktur.
resource_name ikili karşılaştırmadır ve mevcut veritabanının derleme ayarlarından bağımsız olarak büyük harf duyarlıdır.
'lock_owner'
Kilidin sahibi, ki kilit istendiğinde lock_owner değerdir.
lock_ownernvarchar(32)'dir ve değer ya Transaction (varsayılan) ya da Session olabilir.
Dönüş türleri
nvarchar(32)
Dönüş değeri
Belirli bir uygulama kaynağında kilit sahibinin tuttuğu kilit modunu döndürür. Kilitleme modu şu değerlerden herhangi birine sahip olabilir:
NoLock
Update
*Paylaşılan NiyetÖzel
IntentShared
IntentExclusive
*Niyeti GüncellemeÖzel
Paylaşılan
Seçkin
*Bu kilit modu, diğer kilit modlarının bir kombinasyonudur ve sp_getapplock bunu açıkça edinemez.
Fonksiyon özellikleri
Nondeterministic
Indekslenebilir değil
Paralelleştirilemeyen
Örnekler
İki kullanıcı (Kullanıcı A ve Kullanıcı B), ayrı oturumlarla, aşağıdaki Transact-SQL ifadesi dizisini çalıştırır.
Kullanıcı A şunları çalıştırıyor:
USE AdventureWorks2022;
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 daha sonra şunları çalıştırıyor:
Use AdventureWorks2022;
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 daha sonra şunları çalıştırıyor:
EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';
GO
Kullanıcı B daha sonra şunları çalıştırıyor:
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: '1' (The lock is grantable.)
GO
Kullanıcı A ve Kullanıcı B daha sonra şunları çalıştırır:
COMMIT TRAN;
GO
Ayrıca bakınız
APPLOCK_TEST (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)