SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

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

Sintaks

  
SET CURSOR_CLOSE_ON_COMMIT { ON | OFF }  

Keterangan

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

Catatan

SET CURSOR_CLOSE_ON_COMMIT ke ON tidak akan menutup kursor terbuka saat rollback saat rollback diterapkan ke savepoint_name dari pernyataan SAVE TRANSACTION.

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

SET SET CURSOR_CLOSE_ON_COMMIT mengontrol perilaku yang sama dengan CURSOR_CLOSE_ON_COMMIT opsi database. Jika CURSOR_CLOSE_ON_COMMIT diatur ke ON atau OFF, 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 OLE DB Klien Asli SQL Server untuk SQL Server dan driver ODBC Klien Asli SQL Server keduanya diatur CURSOR_CLOSE_ON_COMMIT ke OFF saat terhubung. DB-Library tidak secara otomatis mengatur nilai.CURSOR_CLOSE_ON_COMMIT

Saat SETSET ANSI_DEFAULTS ON, diaktifkan. SETSET CURSOR_CLOSE_ON_COMMIT

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

ALTER DATABASE (Transact-SQL)
MULAI TRANSAKSI (Transact-SQL)
TUTUP (T-SQL)
TRANSAKSI PENERAPAN (T-SQL)
TRANSAKSI ROLLBACK (Transact-SQL)
SET Pernyataan (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)