APPLOCK_TEST (T-SQL)
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Fungsi ini mengembalikan informasi tentang apakah kunci dapat diberikan pada sumber daya aplikasi tertentu atau tidak, untuk pemilik kunci tertentu, tanpa akuisisi kunci. Sebagai fungsi kunci aplikasi, APPLOCK_TEST beroperasi pada database saat ini. Database adalah cakupan kunci aplikasi.
Sintaks
APPLOCK_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , 'lock_owner' )
Argumen
' database_principal '
Peran pengguna, peran, atau aplikasi yang dapat diberikan izin ke objek dalam database. Agar berhasil memanggil fungsi, pemanggil fungsi harus menjadi anggota database_principal, dbo, atau peran database tetap db_owner.
' resource_name '
Nama sumber daya kunci yang ditentukan oleh aplikasi klien. Aplikasi harus memastikan nama sumber daya yang unik. Nama yang ditentukan di-hash secara internal ke dalam nilai yang dapat disimpan oleh manajer kunci SQL Server secara internal. resource_name adalah nvarchar(255), tanpa default. resource_name dibandingkan biner, dan peka huruf besar/kecil terlepas dari pengaturan kolater database saat ini.
' lock_mode '
Mode kunci yang akan diperoleh untuk sumber daya tertentu. lock_mode adalah nvarchar(32), tanpa nilai default. lock_mode dapat memiliki salah satu nilai ini: Bersama, Pembaruan, IntentShared, IntentExclusive, Eksklusif.
' lock_owner '
Pemilik kunci, yang merupakan nilai lock_owner saat kunci diminta. lock_owner adalah nvarchar(32), dan nilainya dapat berupa Transaksi (default) atau Sesi. Jika default atau Transaksi ditentukan secara eksplisit, APPLOCK_TEST harus dijalankan dari dalam transaksi.
Jenis yang dikembalikan
smallint
Nilai hasil
0 jika kunci tidak dapat diberikan kepada pemilik yang ditentukan, atau 1 jika kunci dapat diberikan.
Properti fungsi
Nondeterministik
Tidak dapat dieksfiniskan
Tidak dapat diparallelizable
Contoh
Dua pengguna (Pengguna A dan Pengguna B), dengan sesi terpisah, jalankan urutan pernyataan Transact-SQL berikut.
Pengguna A berjalan:
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
Pengguna B kemudian menjalankan:
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
Pengguna A kemudian menjalankan:
EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';
GO
Pengguna B kemudian menjalankan:
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: '1' (The lock is grantable.)
GO
Pengguna A dan Pengguna B kemudian menjalankan:
COMMIT TRAN;
GO
Lihat juga
APPLOCK_MODE (T-SQL)
sp_getapplock (T-SQL)
sp_releaseapplock (T-SQL)