Aracılığıyla paylaş


ROLLBACK TRANSACTION (Transact-SQL)

Geri açık veya örtük işlem, hareket başına ya da bir kayıt noktası işlemi içinde alır.

Topic link iconTransact-SQL sözdizimi kuralları

ROLLBACK { TRAN | TRANSACTION } 
     [ transaction_name | @tran_name_variable
     | savepoint_name | @savepoint_variable ] 
[ ; ]

Bağımsız değişkenler

  • transaction_name
    Is the name assigned to the transaction on BEGIN TRANSACTION.transaction_name must conform to the rules for identifiers, but only the first 32 characters of the transaction name are used.When nesting transactions,transaction_name must be the name from the outermost BEGIN TRANSACTION statement.

  • **@**tran_name_variable
    Kullanıcı tanımlı bir değişkenin adını, geçerli işlem adını içeren iş.Değişkeni ile bildirilmeli bir char, varchar, nchar, veya nvarchar Veri Türü.

  • savepoint_name
    Is savepoint_name from a SAVE TRANSACTION statement.savepoint_name must conform to the rules for identifiers.Kullanımı savepoint_name Koşullu bir geri alma, yalnızca hareketin bir kısmında etkiler.

  • **@**savepoint_variable
    Kullanıcı tanımlı bir değişkenin adını, geçerli kayıt noktası adı içeren iş.Değişkeni ile bildirilmeli bir char, varchar, nchar, veya nvarchar Veri Türü.

Remarks

ROLLBACK TRANSACTION veya bir kayıt noktası hareketinin başlangıç yapılan tüm veri değişiklikleri siler.Ayrıca hareketin tutulan kaynakları serbest bırakır.

ROLLBACK TRANSACTION olmadan bir savepoint_name veya transaction_name geri hareket başlangıcına alır. Hareketler iç içe geçmiş, aynı ifadenin en dıştaki BEGIN TRANSACTION deyim için tüm iç hareketleri geri alır.Her iki durumda @@ TRANCOUNT sistem işlev 0 ROLLBACK TRANSACTION azaltır.GERİ ALMA HAREKETİ savepoint_name @@ TRANCOUNT indirim.

ROLLBACK TRANSACTION deyim belirten bir savepoint_name dışında escalations ve dönüşümler kayıt noktası ötesinde alınan tüm kilitler serbest bırakır. Bu kilitlerin serbest bırakılmış ve bunların önceki kilit modu için geri dönüştürüldü.

ROLLBACK TRANSACTION başvuramaz bir savepoint_name Dağıtılmış hareketlere ya da açık olarak BEGIN, dağıtılmış işlem ile başlatıldı veya yerel bir hareketten escalated.

Yeniden bir TRANSACTION yürütme deyim yürütüldükten sonra BIR işlem geri alınamaz.

Bir hareket içinde yinelenen kayıt noktası adlarını izin verilir, ancak yinelenen kayıt noktası adı kullanarak bir ROLLBACK TRANSACTION, bu kayıt noktası adı kullanarak yalnızca en son SAVE HAREKETI geri alır.

Saklı yordamlar, ROLLBACK TRANSACTION deyimlerini olmadan, bir savepoint_name veya transaction_name tüm ifadeleri en dıştaki BEGIN TRANSACTıON'için geri almak almak alın. Saklı yordamdaki @@ TRANCOUNT saklı yordamın çağrıldığında, saklı yordam @@ TRANCOUNT değerinden tamamladığında, farklı bir değer olması neden olan BIR ROLLBACK TRANSACTION deyim bilgilendirici bir ileti oluşturur.Bu iletinin sonraki işlem etkilemez.

Bir ROLLBACK TRANSACTION de tetikleyici yayımlanırsa:

  • Geçerli hareket içinde bir bağlantı noktasına yapılan tüm veri değişiklikleri, herhangi bir tetikleyici tarafından yapılan dahil olmak üzere yeniden alınır.

  • Tetikleyici, kalan tüm ifadeleri sonra ROLLBACK deyim yürütme devam eder.Bu ifadeler birini verileri değiştirirseniz, değişiklikler geri alınır değil.Bu deyimleri kalan yürütme tarafından hiçbir iç içe geçmiş Tetikleyicileri harekete geçirildi.

  • Sonra toplu iş iş deyim s deyim, tetikleyici harekete yürütülmez.

@@ TRANCOUNT bir tetikleyici, hatta autocommit modundayken girerken artırılır.(Sistem tetikleyici örtülü bir iç içe geçmiş hareket olarak davranır.)

Saklı yordamlar, ROLLBACK TRANSACTION deyimlerini, sonraki yordamı çağıran toplu deyimleri etkilemez; sonraki bir toplu iş deyimlerinde yürütülür.ROLLBACK TRANSACTION deyimlerini tetikleyiciler, tetikleyici harekete deyim içeren bir toplu iş sona erdir; sonraki bir toplu iş deyimlerinde yürütülmez.

Bir ROLLBACK TRANSACTION deyim kullanıcıya herhangi bir ileti oluşturur.Uyarılar saklı yordamlar veya Tetikleyicileri gerekiyorsa, PRINT ya da RAISERROR deyimi kullanın.RAISERROR hatalarını gösteren için tercih edilen deyim.

Imleç bir ROLLBACK etkisi bu üç kurallar tarafından tanımlanır:

  1. CURSOR_CLOSE_ON_COMMIT küme ON, ROLLBACK kapatır, ancak tüm açık imleçleri ayırması.

  2. Herhangi bir açık zaman uyumlu INSENSITIVE ya da STATIK imleç veya tam olarak giriş zaman uyumsuz STATIK imleçler CURSOR_CLOSE_ON_COMMIT kümesiyle ROLLBACK etkilemez.Herhangi bir tür açık imleç kapalı ancak değil ayırmanın.

  3. toplu iş iş işlemi sona erdirir ve dahili bir geri alma oluşturduğu bir hata, hata bildirimi içeren toplu iş iş işlemde bildirilen tüm imleçler kaldırır.Tüm imleçleri türlerine veya CURSOR_CLOSE_ON_COMMIT ayarına bakılmaksızın ayırmanın.Bu hata toplu iş iş işi tarafından adlandırılan bir saklı yordamda bildirilen işaretçiler içerir.toplu iş iş işlemde hata toplu iş iş önce kural için 1 ve 2'olarak bildirilen imleçlerdir.Bir çıkmaz hatası, hata, bu tür bir örnektir.Tetikleyici otomatik olarak verilen BIR ROLLBACK deyim, bu tür bir hata üretir.

ROLLBACK TRANSACTION gösteren bir kod örneği için bkz: Iç içe geçmiş hareketler.

İzinler

Üyelik gerektirir Ortak roldür.

Örnekler

Aşağıdaki örnekte, adlandırılmış bir hareketi geri alma etkisini gösterir.

USE TempDB;
GO

CREATE TABLE ValueTable ([value] int)
GO

DECLARE @TransactionName varchar(20) = 'Transaction1';

--These statements start a named transaction,
--insert a two records, and then roll back
--the transaction named in the variable 
--@TransactionName.
BEGIN TRAN @TransactionName
       INSERT INTO ValueTable VALUES(1)
       INSERT INTO ValueTable VALUES(2)
ROLLBACK TRAN @TransactionName

INSERT INTO ValueTable VALUES(3)
INSERT INTO ValueTable VALUES(4)

SELECT * FROM ValueTable

DROP TABLE ValueTable

--Results
--value
-------------
--3
--4