Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Pernyataan ini mengembalikan transaksi eksplisit atau implisit ke awal transaksi, atau ke titik penyimpanan di dalam transaksi. Anda menggunakan ROLLBACK TRANSACTION untuk menghapus semua modifikasi data yang dilakukan dari awal transaksi atau dari titik penyimpanan.
ROLLBACK TRANSACTION juga membebaskan sumber daya yang dipegang oleh transaksi.
Perubahan yang dilakukan pada variabel lokal atau variabel tabel tidak dihapus oleh pernyataan ini.
Syntax
Sintaks untuk SQL Server, Azure SQL Database, Azure SQL Managed Instance, database SQL di Microsoft Fabric.
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[ ; ]
Sintaks untuk Fabric Data Warehouse, Azure Synapse Analytics, dan Parallel Data Warehouse Database.
ROLLBACK { TRAN | TRANSACTION }
[ ; ]
Arguments
transaction_name
Berlaku untuk: SQL Server 2008 (10.0.x) dan versi yang lebih baru, Azure SQL Database, Azure SQL Managed Instance, database SQL di Microsoft Fabric.
Nama yang ditetapkan ke transaksi dengan BEGIN TRANSACTION.
transaction_name harus sesuai dengan aturan untuk pengidentifikasi, tetapi hanya 32 karakter pertama dari nama transaksi yang digunakan. Ketika ada transaksi dalam, transaction_name harus nama dari pernyataan terluar BEGIN TRANSACTION .
transaction_name selalu peka huruf besar/kecil, bahkan ketika instans Mesin Database tidak peka huruf besar/kecil.
@tran_name_variable
Berlaku untuk: SQL Server 2008 (10.0.x) dan versi yang lebih baru, Azure SQL Database, Azure SQL Managed Instance, database SQL di Microsoft Fabric.
Nama variabel yang ditentukan pengguna yang berisi nama transaksi yang valid. Variabel harus dideklarasikan dengan jenis data char, varchar, nchar, atau nvarchar .
savepoint_name
savepoint_name dari pernyataanSAVE TRANSACTION.
savepoint_name harus sesuai dengan aturan untuk pengidentifikasi. Gunakan savepoint_name ketika pemutaran kembali hanya akan memengaruhi bagian transaksi setelah titik penyimpanan.
@savepoint_variable
Nama variabel yang ditentukan pengguna yang berisi nama titik simpan yang valid. Variabel harus dideklarasikan dengan jenis data char, varchar, nchar, atau nvarchar .
Penanganan kesalahan
Pernyataan ROLLBACK TRANSACTION tidak menghasilkan pesan apa pun kepada pengguna. Jika peringatan diperlukan dalam prosedur atau pemicu tersimpan, gunakan RAISERROR pernyataan atau PRINT .
Remarks
ROLLBACK TRANSACTION
tanpa savepoint_name atau transaction_name kembali ke awal transaksi. Ketika ada transaksi dalam, pernyataan yang sama ini mengembalikan semua transaksi dalam ke pernyataan terluar BEGIN TRANSACTION . Dalam kedua kasus, ROLLBACK TRANSACTION mengurangi @@TRANCOUNT fungsi sistem menjadi 0.
ROLLBACK TRANSACTION savepoint_name tidak mengurangi @@TRANCOUNT.
ROLLBACK TRANSACTION tidak dapat mereferensikan savepoint_name dalam transaksi terdistribusi yang dimulai secara eksplisit dengan BEGIN DISTRIBUTED TRANSACTION atau dipromosikan dari transaksi lokal.
Transaksi tidak dapat digulung balik setelah COMMIT TRANSACTION pernyataan dijalankan, kecuali ketika COMMIT TRANSACTION dikaitkan dengan transaksi dalam yang terkandung dalam transaksi yang digulung balik. Dalam hal ini, transaksi dalam digulung balik, bahkan jika Anda mengeluarkan COMMIT TRANSACTION untuk itu.
Dalam transaksi, nama titik penyimpanan duplikat diizinkan, tetapi ROLLBACK TRANSACTION menggunakan nama titik simpan duplikat hanya kembali ke yang terbaru SAVE TRANSACTION menggunakan nama titik simpan tersebut.
Nota
Mesin Database tidak mendukung transaksi berlapis yang dapat dikelola secara independen. Penerapan penurunan @@TRANCOUNT transaksi dalam tetapi tidak memiliki efek lain. Pemutaran kembali transaksi dalam selalu mengembalikan transaksi luar, kecuali ada titik penyimpanan dan ditentukan dalam ROLLBACK pernyataan.
Interoperability
Dalam prosedur tersimpan ROLLBACK TRANSACTION , pernyataan tanpa savepoint_name atau transaction_name mengembalikan semua pernyataan ke terluar BEGIN TRANSACTION. Pernyataan ROLLBACK TRANSACTION dalam prosedur tersimpan @@TRANCOUNT yang menyebabkan memiliki nilai yang berbeda pada penyelesaian prosedur daripada nilai pada prosedur mulai menghasilkan pesan informasi. Pesan ini tidak memengaruhi pemrosesan berikutnya.
ROLLBACK TRANSACTION Jika dikeluarkan dalam pemicu:
Semua modifikasi data yang dilakukan pada titik tersebut dalam transaksi saat ini digulung balik, termasuk yang dibuat oleh pemicu.
Pemicu terus menjalankan pernyataan yang tersisa setelah
ROLLBACKpernyataan. Jika salah satu pernyataan ini memodifikasi data, modifikasi tidak digulung balik. Tidak ada pemicu berlapis yang diaktifkan oleh eksekusi pernyataan yang tersisa ini.Pernyataan dalam batch setelah pernyataan yang menembakkan pemicu tidak dijalankan.
@@TRANCOUNT ditahapkan oleh pemicu saat memasukkan pemicu, bahkan ketika dalam mode autocommit. Sistem memperlakukan pemicu sebagai transaksi dalam yang tersirat.
Pernyataan ROLLBACK TRANSACTION dalam prosedur tersimpan tidak memengaruhi pernyataan berikutnya dalam batch yang disebut prosedur. Pernyataan berikutnya dalam batch dijalankan.
Pernyataan ROLLBACK TRANSACTION dalam pemicu mengakhiri batch yang berisi pernyataan yang menembakkan pemicu. Pernyataan berikutnya dalam batch tidak dijalankan.
Efek pada ROLLBACK kursor ditentukan oleh aturan berikut:
Dengan
CURSOR_CLOSE_ON_COMMITdiatur keON,ROLLBACKditutup tetapi tidak membatalkan alokasi semua kursor terbuka.Dengan
CURSOR_CLOSE_ON_COMMITdiatur keOFF,ROLLBACKtidak memengaruhi kursor atauSTATICINSENSITIVEkursor atau asinkronSTATICterbuka yang sepenuhnya diisi. Kursor terbuka dari jenis lain ditutup tetapi tidak dibatalkan alokasinya.Kesalahan yang mengakhiri batch dan mengembalikan transaksi membatalkan alokasi semua kursor yang dideklarasikan dalam batch yang berisi pernyataan yang menghasilkan kesalahan. Semua kursor dibatalkan alokasinya terlepas dari jenisnya atau pengaturan
CURSOR_CLOSE_ON_COMMIT. Ini termasuk kursor yang dideklarasikan dalam prosedur tersimpan yang disebut oleh batch yang menghasilkan kesalahan. Kursor yang dideklarasikan dalam batch sebelum batch yang menghasilkan kesalahan tunduk pada dua aturan sebelumnya.Kebuntuan adalah contoh jenis kesalahan ini. Pernyataan
ROLLBACKyang dikeluarkan dalam pemicu juga menghasilkan perilaku ini.
Perilaku penguncian
Pernyataan ROLLBACK TRANSACTION yang menentukan savepoint_name melepaskan kunci apa pun yang diperoleh di luar titik penyimpanan, kecuali untuk kunci yang diekskalasi dan dikonversi. Kunci ini tidak dilepaskan, dan tidak dikonversi kembali ke mode kunci sebelumnya.
Permissions
Memerlukan keanggotaan dalam peran tersebut public .
Examples
Contoh berikut menunjukkan efek mengembalikan transaksi bernama. Setelah Anda membuat tabel, pernyataan berikut memulai transaksi bernama, menyisipkan dua baris, lalu mengembalikan transaksi bernama dalam variabel @TransactionName. Pernyataan lain di luar transaksi bernama menyisipkan dua baris. Kueri mengembalikan hasil pernyataan sebelumnya.
USE tempdb;
CREATE TABLE ValueTable
(
value INT
);
DECLARE @TransactionName AS VARCHAR (20) = 'Transaction1';
BEGIN TRANSACTION @TransactionName;
INSERT INTO ValueTable
VALUES (1), (2);
ROLLBACK TRANSACTION @TransactionName;
INSERT INTO ValueTable
VALUES (3), (4);
SELECT [value]
FROM ValueTable;
DROP TABLE ValueTable;
Berikut set hasilnya.
value
-----
3
4