APPLOCK_MODE (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Fungsi ini mengembalikan mode kunci yang dipegang oleh pemilik kunci pada sumber daya aplikasi tertentu. Sebagai fungsi kunci aplikasi, APPLOCK_MODE beroperasi pada database saat ini. Database adalah cakupan kunci aplikasi.

Konvensi sintaks transact-SQL

Sintaksis

APPLOCK_MODE( 'database_principal' , 'resource_name' , 'lock_owner' )  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

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_owner'
Pemilik kunci, yang merupakan nilai lock_owner saat kunci diminta. lock_owner adalah nvarchar(32), dan nilainya dapat berupa Transaksi (default) atau Sesi.

Jenis yang dikembalikan

nvarchar(32)

Nilai hasil

Mengembalikan mode kunci yang dipegang oleh pemilik kunci pada sumber daya aplikasi tertentu. Mode kunci dapat memiliki salah satu nilai ini:

NoLock
Pembaruan
*SharedIntentExclusive

NiatShared
IntentExclusive
*UpdateIntentExclusive

Bersama
Eksklusif

*Mode kunci ini adalah kombinasi dari mode kunci lainnya dan sp_getapplock tidak dapat memperolehnya secara eksplisit.

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  

Baca juga

APPLOCK_TEST (T-SQL)
sp_getapplock (T-SQL)
sp_releaseapplock (T-SQL)