Bagikan melalui


SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Mengontrol perilaku pernyataan TRANSAKSI PENERAPAN Transact-SQL. Nilai default untuk pengaturan ini adalah NONAKTIF. Ini berarti bahwa server tidak akan menutup kursor saat Anda melakukan transaksi.

Konvensi sintaks transact-SQL

Sintaksis

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Catatan

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

Keterangan

Ketika SET CURSOR_CLOSE_ON_COMMIT AKTIF, pengaturan ini menutup kursor terbuka pada penerapan atau pembatalan sesuai dengan ISO. Saat SET CURSOR_CLOSE_ON_COMMIT NONAKTIF, kursor tidak ditutup saat transaksi dilakukan.

Catatan

SET CURSOR_CLOSE_ON_COMMIT ke AKTIF tidak akan menutup kursor terbuka saat pembatalan saat pembatalan diterapkan ke savepoint_name dari pernyataan SIMPAN TRANSAKSI.

Ketika SET CURSOR_CLOSE_ON_COMMIT NONAKTIF, pernyataan ROLLBACK hanya menutup kursor asinkron terbuka yang tidak sepenuhnya diisi. Kursor STATIC atau INSENSITIVE yang dibuka setelah modifikasi dilakukan tidak akan lagi mencerminkan status data jika modifikasi digulung balik.

SET CURSOR_CLOSE_ON_COMMIT mengontrol perilaku yang sama dengan opsi database CURSOR_CLOSE_ON_COMMIT. Jika CURSOR_CLOSE_ON_COMMIT diatur ke AKTIF atau NONAKTIF, pengaturan tersebut digunakan pada koneksi. Jika SET CURSOR_CLOSE_ON_COMMIT belum ditentukan, nilai di kolom is_cursor_close_on_commit_on dalam tampilan katalog sys.databases berlaku.

Penyedia SQL Server Native Client OLE DB untuk SQL Server dan driver ODBC SQL Server Native Client keduanya mengatur CURSOR_CLOSE_ON_COMMIT ke OFF saat tersambung. DB-Library tidak secara otomatis mengatur nilai CURSOR_CLOSE_ON_COMMIT.

Saat SET ANSI_DEFAULTS AKTIF, SET CURSOR_CLOSE_ON_COMMIT diaktifkan.

Pengaturan SET CURSOR_CLOSE_ON_COMMIT diatur pada waktu eksekusi atau run time dan bukan pada waktu penguraian.

Untuk menampilkan pengaturan saat ini untuk pengaturan ini, jalankan kueri berikut.

DECLARE @CURSOR_CLOSE VARCHAR(3) = 'OFF';  
IF ( (4 & @@OPTIONS) = 4 ) SET @CURSOR_CLOSE = 'ON';  
SELECT @CURSOR_CLOSE AS CURSOR_CLOSE_ON_COMMIT;  

Izin

Memerlukan keanggotaan dalam peran publik .

Contoh

Contoh berikut mendefinisikan kursor dalam transaksi dan mencoba menggunakannya setelah transaksi dilakukan.

-- SET CURSOR_CLOSE_ON_COMMIT  
-------------------------------------------------------------------------------  
SET NOCOUNT ON;  
  
CREATE TABLE t1 (a INT);  
GO   
  
INSERT INTO t1   
VALUES (1), (2);  
GO  
  
PRINT '-- SET CURSOR_CLOSE_ON_COMMIT ON';  
GO  
SET CURSOR_CLOSE_ON_COMMIT ON;  
GO  
PRINT '-- BEGIN TRAN';  
BEGIN TRAN;  
PRINT '-- Declare and open cursor';  
DECLARE testcursor CURSOR FOR  
    SELECT a FROM t1;  
OPEN testcursor;  
PRINT '-- Commit tran';  
COMMIT TRAN;  
PRINT '-- Try to use cursor';  
FETCH NEXT FROM testcursor;  
CLOSE testcursor;  
DEALLOCATE testcursor;  
GO  
PRINT '-- SET CURSOR_CLOSE_ON_COMMIT OFF';  
GO  
SET CURSOR_CLOSE_ON_COMMIT OFF;  
GO  
PRINT '-- BEGIN TRAN';  
BEGIN TRAN;  
PRINT '-- Declare and open cursor';  
DECLARE testcursor CURSOR FOR  
    SELECT a FROM t1;  
OPEN testcursor;  
PRINT '-- Commit tran';  
COMMIT TRAN;  
PRINT '-- Try to use cursor';  
FETCH NEXT FROM testcursor;  
CLOSE testcursor;  
DEALLOCATE testcursor;  
GO  
DROP TABLE t1;  
GO  

Lihat Juga

MENGUBAH DATABASE (T-SQL)
BEGIN TRANSACTION (Transact-SQL)
TUTUP (T-SQL)
TRANSAKSI PENERAPAN (T-SQL)
TRANSAKSI ROLLBACK (Transact-SQL)
Pernyataan SET (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)