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, kilidin edinilmeden belirli bir uygulama kaynağında, belirli bir kilit sahibi için verilip verilemeyeceğine dair bilgi sağlar. Bir uygulama kilidi fonksiyonu olarak, APPLOCK_TEST mevcut veritabanında çalışır. Veritabanı, uygulama kilitlerinin kapsamıdır.
Transact-SQL söz dizimi kuralları
Sözdizimi
APPLOCK_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , '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_mode'
Belirli bir kaynak için elde edilecek kilit modu.
lock_modenvarchar(32)'dir ve varsayılan değeri yoktur.
lock_mode şu değerlerden herhangi birine sahip olabilir: Paylaşılan, Güncellenen, NiyetPaylaşılan, NiyetEksklüziv, Özel değer.
'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. Varsayılan veya İşlem açıkça belirtiliyorsa, APPLOCK_TEST işlem içinden yürütülmelidir.
Dönüş türleri
smallint
Dönüş değeri
Eğer kilit belirtilen sahibine verilemiyorsa 0, kilit verilebiliyorsa 1.
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 her ikisi de şu şekilde çalıştırır:
COMMIT TRAN;
GO
Ayrıca bakınız
APPLOCK_MODE (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)