rollback TRANSACTION (Transact-sql)
Geri bir açık veya örtülü hareket hareketin başında veya içinde hareket noktası alır. rollback TRANSACTION, hareket veya bir kayıt noktası başlangıç yapılan tüm veri değişiklikleri silmek için kullanabilirsiniz. Ayrıca, hareket tarafından tutulan kaynakları serbest bırakır.
Transact-SQL Sözdizim Kuralları
Sözdizimi
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[ ; ]
Bağımsız değişkenler
transaction_name
BEGIN TRANSACTION hareket adı atanır. transaction_nametanımlayıcılar, kurallarına uyması gerekir ama hareket adı sadece ilk 32 karakteri kullanılır. Hareketler iç içe geçmiş zaman transaction_name gelen dıştaki BEGIN TRANSACTION deyimi olmalıdır.**@**tran_name_variable
Geçerli bir işlem adı olan kullanıcı tanımlı bir değişkenin adıdır. Değişken ile bildirilmeli bir char, varchar, nchar, ya nvarcharveri türü.savepoint_name
İse savepoint_namedan save TRANSACTION deyimi. savepoint_nametanımlayıcıları kuralları uyması gerekir. Kullanım savepoint_namezaman koşullu bir geri alma etkiler hareket sadece bir parçası.**@**savepoint_variable
Kullanıcı tanımlı bir değişken adını içeren bir geçerli kayıt noktası adı. Değişken ile bildirilmeli bir char, varchar, nchar, ya nvarcharveri türü.
Hata işleme
rollback TRANSACTION deyimi herhangi bir ileti kullanıcıya üretmez. Uyarılar saklı yordamlar veya Tetikleyiciler gerekirse RAISERROR ya da baskı deyimlerini kullanın. RAISERROR, hatalarını gösteren için tercih edilen bir ifadedir.
Genel Yorumlar
rollback TRANSACTION olmadan bir savepoint_nameya transaction_namerulo sırt-e doğru hareket başına. Hareketler iç içe geçmiş zaman, bu aynı deyimi dıştaki BEGIN TRANSACTION deyimi için tüm iç işlemleri geri alır. Her iki durumda, @@ trancount sistem işlevi 0 rollback TRANSACTION azaltır. rollback TRANSACTION savepoint_name@@ trancount azaltma değil.
rollback TRANSACTION can't referans bir savepoint_nameDağıtılmış hareketlere ya da açıkça dağıtılmış hareket BEGIN ile başlatıldığında veya yerel bir hareketin escalated.
Bir hareketi geri TRANSACTION COMMIT Deyim yürütüldükten sonra alınamaz.
Bir işlem içinde yinelenen kayıt noktası adları izin verilir, ancak yinelenen kayıt noktası adı kullanarak rollback TRANSACTION geri alır sadece en son save hareket için bu kayıt noktası adı kullanarak.
Birlikte Çalışabilirlik
Saklı yordamlarda, rollback TRANSACTION deyimlerini olmadan bir savepoint_nameya transaction_nametüm deyimleri dıştaki BEGIN TRANSACTION geri. Bir saklı yordam @@ trancount saklı yordam @@ trancount değerinden tamamlandığında, saklı yordam çağrıldığında farklı bir değer neden bir rollback TRANSACTION deyimi bir bilgilendirme iletisi üretir. Bu iletinin sonraki işlem etkilemez.
Bir tetikleyici rollback TRANSACTION yayımlanırsa:
Bu noktada geçerli hareket içinde yapılan tüm veri değişiklikleri tetikleyici tarafından yapılan dahil olmak üzere geri alınır.
Tetikleyici rollback deyimi sonra kalan tüm deyimleri yürütme devam ediyor. Bu ifadelerden birini verileri değiştirirseniz, değişiklikler geri alınır değil. Hiçbir iç içe Tetikleyiciler bu ifadeleri kalan yürütme tarafından ateşlenir.
Toplu iş deyimlerinde tetikleyici harekete deyiminden yürütülmez.
@@ trancount bir tetikleyici, bile autocommit modunda girerken artırılır. (Sistem tetikleyici örtülü bir iç içe geçmiş hareket olarak davranır.)
rollback TRANSACTION deyimlerini saklı yordamlarda yordam adı verilen toplu iş sonraki deyimleri etkilemez; sonraki toplu iş deyimleri çalıştırılır. rollback TRANSACTION deyimlerini Tetikleyiciler, tetikleyici harekete deyimi içeren toplu iş sona erecektir; sonraki toplu iş deyimlerinde yürütülmez.
Imleçler bir rollback etkisi bu üç kurallar tarafından tanımlanır:
Set CURSOR_CLOSE_ON_COMMIT ile rollback kapatır, ancak tüm açık imleçleri ayırması değil.
İle CURSOR_CLOSE_ON_COMMIT çıktık, herhangi bir açık senkron INSENSITIVE veya statik imleçler ya da tam olarak doldurulur zaman uyumsuz statik imleçler rollback etkilemez. Diğer bir tür açık imleçler kapalı ancak değil kaldırıldı.
Bir toplu işlemi sonlandırır ve bir iç geri oluşturan bir hata bildirilen hata deyimi içeren toplu işleme tüm imleçler kaldırır. Tüm imleçler türleri veya CURSOR_CLOSE_ON_COMMIT ayarı ne olursa olsun kaldırıldı. Bu hata toplu adlandırılan saklı yordamda bildirilen işaretçiler içerir. Toplu işlemde hata toplu işlemle kurala 1 ve 2 ilan imleçler. Bir kilitlenme hatası, bu tür bir hata örneğidir. rollback deyimi tetikleyici otomatik olarak verilen bu tür bir hata üretir.
Kilitleme davranışı
Bir rollback TRANSACTION deyimi belirterek bir savepoint_namedışında escalations ve dönüşüm noktası dışında edinilen tüm kilitleri serbest bırakır. Bu kilitleri serbest ve onların önceki kilidi moduna dönüştürülmez.
İzinler
Üyelik Genel rolü.
Örnekler
Aşağıdaki örnek, adlı bir hareket geri etkisini göstermektedir.
USE tempdb;
GO
CREATE TABLE ValueTable ([value] int;)
GO
DECLARE @TransactionName varchar(20) = 'Transaction1';
--The following statements start a named transaction,
--insert two rows, and then roll back
--the transaction named in the variable @TransactionName.
--Another statement outside of the named transaction inserts two rows.
--The query returns the results of the previous statements.
BEGIN TRAN @TransactionName
INSERT INTO ValueTable VALUES(1), (2);
ROLLBACK TRAN @TransactionName;
INSERT INTO ValueTable VALUES(3),(4);
SELECT [value] FROM ValueTable;
DROP TABLE ValueTable;
--Results
--value
-------------
--3
--4
USE tempdb;
GO
CREATE TABLE ValueTable ([value] int;)
GO
DECLARE @TransactionName varchar(20) = 'Transaction1';
--The following statements start a named transaction,
--insert two rows, and then roll back
--the transaction named in the variable @TransactionName.
--Another statement outside of the named transaction inserts two rows.
--The query returns the results of the previous statements.
BEGIN TRAN @TransactionName
INSERT INTO ValueTable VALUES(1), (2);
ROLLBACK TRAN @TransactionName;
INSERT INTO ValueTable VALUES(3),(4);
SELECT [value] FROM ValueTable;
DROP TABLE ValueTable;
--Results
--value
-------------
--3
--4
Ayrıca bkz.
Başvuru
BEGIN dağıtılmış hareket (Transact-sql)
BEGIN TRANSACTION (Transact-SQL)