Aracılığıyla paylaş


Geri alma HAREKETİ (Transact-SQL)

Açık bir geri alınır veya örtük işlem hareket başına veya bir kayıt noktası hareket içinde.

Konu bağlantısı simgesiTransact-SQL sözdizimi 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, ancak hareket adı ilk 32 karakteri kullanılır.Hareketler, baþtakitransaction_name en dıştaki BEGIN TRANSACTION deyimolmalıdır.

  • **@**tran_name_variable
    Kullanıcı tanımlı bir değişken adını içeren geçerli hareket adı.Değişken ile bildirilmesi gerekir bir char, varchar, nchar, veya nvarchar veri türü.

  • savepoint_name
    İş savepoint_name bir hareket kaydetme deyim.savepoint_nametanıtıcı kurallarına uyması gerekir.Use savepoint_name , koşullu bir geri alma etkiler yalnızca bir kısmını hareket.

  • **@**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 bildirilmesi gerekir bir char, varchar, nchar, veya nvarchar veri türü.

Açıklamalar

rollback İŞLEMİNİ Başlat hareket veya bir kayıt noktasıtarafından yapılan tüm veri değişiklikleri siler.Ayrıca hareket tarafından tutulan kaynakları serbest bırakır.

Geri alma HAREKETİ olmadan bir savepoint_name veya transaction_name başlangıcına geri alırhareket.Hareketleri baþtaki bu aynı deyim en dıştaki BEGIN TRANSACTION deyimtüm iç işlemler geri alınır.Her iki durumda, rollback İŞLEMİNİ azaltır @@ trancount sistem işlev 0.Geri alma HAREKETİ savepoint_name değil azaltma @@ trancount.

Geri alma HAREKETİ deyim belirterek bir savepoint_name kayıt noktası, dışında escalations ve ötesinde alınan kilitleri serbest bırakırdönüşümleri.Bu kilitleri serbest ve tekrar kendi önceki kilit moduna dönüştürülmez.

Geri alma HAREKETİ başvurusu bir savepoint_name başladığında ya da açıkça dağıtılmış hareket BAŞLAMASI ile dağıtılmış hareketlere veya aktarılana yerel bir hareket.

HAREKET TAMAMLAMA deyim yeniden yürütüldükten sonra bir hareket alınamaz.

Bir hareketin içinde yinelenen kayıt noktası adlarına izin verilir, ancak yinelenen kayıt noktası adı kullanarak bir rollback İŞLEMİNİ, bu kayıt noktası adı kullanarak yalnızca en son Kaydet HAREKETİ geri alır.

Saklı yordamlarda, rollback TRANSACTION deyimlerini olmadan bir savepoint_name veya transaction_name geri almak tüm ifadeleri en dıştaki BEGIN hareket.@@ trancount saklı yordam saklı yordam çağrıldığında @@ trancount değerinden tamamlandığında farklı bir değer sağlamak neden bir saklı yordam rollback İŞLEMİNİ deyim bir bilgilendirme iletisi üretir.Bu iletinin sonraki işlem etkilemez.

Bir tetikleyici rollback İŞLEMİNİ yayımlanırsa:

  • Geçerli hareket içinde o noktaya yapılan tüm veri değişiklikleri geri, herhangi bir tetikleyici tarafından yapılan da dahil olmak üzere alınır.

  • Tetikleyici rollback deyimherhangi kalan ifadeler çalıştırmasını devam eder.Bu ifadeler 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 tetiklenir.

  • toplu iş deyimlerinde tetikleyici harekete deyim yürütülmez.

@@ trancount bir otomatik yürütme moduolduğunda bile, bir tetikleyici 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 olarak adlandırılan toplu iş sonraki deyimler etkilemez; toplu iş sonraki deyimler çalıştırılır.Tetikleyici rollback İŞLEMİNİ deyimlerinde tetikleyici harekete deyim içeren toplu iş işten; sonraki deyimler toplu iş yürütülmez.

rollback İŞLEMİNİ deyim , kullanıcıya herhangi bir iletisi oluşturmaz.Uyarılar saklı yordamlar veya Tetikleyiciler gerekiyorsa, RAISERROR ya da yazdırma deyimlerini kullanın.RAISERROR hataları gösteren için tercih edilen deyim olur.

İmleçler bir rollback etkisi bu üç kurallar tarafından tanımlanır:

  1. küme CURSOR_CLOSE_ON_COMMIT on ile rollback kapatır, ancak tüm açık imleçleri ayırması değil.

  2. CURSOR_CLOSE_ON_COMMIT küme ile geri alma herhangi bir açık eşzamanlı ve küçük harf duyarlı ya da statik imleç veya tam olarak doldurulan zaman uyumsuz Statik İmleçler etkilemez.Herhangi bir tür açık imleçler kapalı ancak yok edilmelidir.

  3. toplu iş sonlandırır ve bir iç rollback üretir hata hata deyimiçeren toplu iş bildirilmiş 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şadlandırılan saklı yordamda bildirilen işaretçiler içerir.toplu iş işlemde hata toplu iş önce 1 ve 2 kurala bağlı bildirilen imleçler.Bir çıkmaz hatası, bu tür bir hata örneğidir.De tetikleyici otomatik olarak verilen bir rollback deyim , bu tür bir hata üretir.

rollback İŞLEMİNİ gösteren bir kod örneği için bkz: İç içe geçmiş hareketleri.

İzinler

Üyelik gerektiren ortak rolü.

Örnekler

Aşağıdaki örnek, adlı bir hareket geri 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