Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'te
ambarMicrosoft Fabric'te SQL veritabanı
Bu deyim, açık veya örtük bir işlemi işlemin başına veya işlemin içindeki bir kayıt noktasına geri alır. İşlemin başlangıcından veya bir kayıt noktasından yapılan tüm veri değişikliklerini silmek için kullanırsınız ROLLBACK TRANSACTION .
ROLLBACK TRANSACTION ayrıca işlem tarafından tutulan kaynakları serbesttir.
Yerel değişkenlerde veya tablo değişkenlerinde yapılan değişiklikler bu deyimle silinmez.
Transact-SQL söz dizimi kuralları
Syntax
SQL Server, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Microsoft Fabric'te SQL veritabanı için söz dizimi.
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[ ; ]
Doku Veri Ambarı, Azure Synapse Analytics ve Paralel Veri Ambarı Veritabanı için söz dizimi.
ROLLBACK { TRAN | TRANSACTION }
[ ; ]
Arguments
transaction_name
Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümleri, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Microsoft Fabric'teki SQL veritabanı.
ile BEGIN TRANSACTIONişleme atanan ad.
transaction_name tanımlayıcıların kurallarına uyması gerekir, ancak işlem adının yalnızca ilk 32 karakteri kullanılır. İç işlemler olduğunda , transaction_name en BEGIN TRANSACTION dıştaki deyimdeki ad olmalıdır.
veritabanı altyapısı örneği büyük/küçük harfe duyarlı olmasa bile transaction_name her zaman büyük/küçük harfe duyarlıdır.
@tran_name_variable
Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümleri, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Microsoft Fabric'teki SQL veritabanı.
Geçerli bir işlem adı içeren kullanıcı tanımlı değişkenin adı. Değişkenin char, varchar, nchar veya nvarchar veri türüyle bildirilmesi gerekir.
savepoint_name
birSAVE TRANSACTION deyimden savepoint_name.
savepoint_name tanımlayıcıların kurallarına uymalıdır. Geri alma işleminin yalnızca kayıt noktasından sonraki kısmını etkilemesi gerektiğinde savepoint_name kullanın.
@savepoint_variable
Geçerli bir kayıt noktası adı içeren kullanıcı tanımlı değişkenin adı. Değişkenin char, varchar, nchar veya nvarchar veri türüyle bildirilmesi gerekir.
Hata yönetimi
Deyimi ROLLBACK TRANSACTION kullanıcıya herhangi bir ileti üretmez. Saklı yordamlarda veya tetikleyicilerde uyarı gerekiyorsa veya RAISERROR deyimlerini kullanınPRINT.
Remarks
ROLLBACK TRANSACTION
savepoint_name veya transaction_name olmadan işlemin başına geri döner. İç işlemler olduğunda, bu aynı deyim tüm iç işlemleri en BEGIN TRANSACTION dıştaki deyime geri alır. Her iki durumda da sistem ROLLBACK TRANSACTION işlevini 0 olarak değiştirir @@TRANCOUNT .
ROLLBACK TRANSACTION savepoint_name azaltmaz @@TRANCOUNT.
ROLLBACK TRANSACTIONile açıkça BEGIN DISTRIBUTED TRANSACTION başlatılan veya yerel bir işlemden yükseltilen dağıtılmış işlemlerdeki bir savepoint_name başvuramaz.
bir deyim yürütüldükten sonra COMMIT TRANSACTION bir işlem geri alınamaz, ancak COMMIT TRANSACTION geri alınan işlem içinde yer alan bir iç işlemle ilişkilendirildiğinde. Bu örnekte, iç işlem için bir COMMIT TRANSACTION yayımlamış olsanız bile geri alınır.
Bir işlem içinde, yinelenen kayıt noktası adlarına izin verilir, ancak ROLLBACK TRANSACTION yinelenen kayıt noktası adı kullanıldığında yalnızca bu kayıt noktası adı kullanılarak en son SAVE TRANSACTION kullanılana geri alınır.
Uyarı
Veritabanı Altyapısı bağımsız olarak yönetilebilir iç içe işlemleri desteklemez. İç işlem işlemesi azalsa @@TRANCOUNT da başka etkisi yoktur. İç işlemin geri alınması, bir kayıt noktası olmadığı ve deyiminde ROLLBACK belirtilmediği sürece her zaman dış işlemi geri alır.
Interoperability
Saklı yordamlarda, ROLLBACK TRANSACTIONsavepoint_name veya transaction_name olmayan bir deyim tüm deyimleri en BEGIN TRANSACTIONdıştaki öğesine geri alır.
ROLLBACK TRANSACTION Saklı yordamdaki bir deyim, yordam tamamlandığında yordam başlangıcındaki değerden farklı bir değere sahip olmasına neden olan @@TRANCOUNT bir bilgilendirme iletisi üretir. Bu ileti sonraki işlemleri etkilemez.
Tetikleyicide bir ROLLBACK TRANSACTION verilirse:
Geçerli işlemde bu noktada yapılan tüm veri değişiklikleri, tetikleyici tarafından yapılanlar da dahil olmak üzere geri alınır.
Tetikleyici, deyiminden sonra kalan deyimleri yürütmeye
ROLLBACKdevam eder. Bu deyimlerden herhangi biri verileri değiştirirse, değişiklikler geri alınamaz. Bu kalan deyimlerin yürütülmesiyle iç içe tetikleyici tetiklenmez.Tetikleyiciyi tetikleyen deyiminden sonraki toplu işteki deyimler yürütülemez.
@@TRANCOUNT otomatik komut modundayken bile tetikleyici girerken bir artırılır. Sistem bir tetikleyiciyi örtük bir iç işlem olarak ele alır.
ROLLBACK TRANSACTION Saklı yordamdaki bir deyim, yordamı çağıran toplu işteki sonraki deyimleri etkilemez. Toplu işlemdeki sonraki deyimler yürütülür.
Tetikleyicideki ROLLBACK TRANSACTION bir deyim, tetikleyiciyi tetikleyen deyimini içeren toplu işlemi sonlandırır. Toplu işteki sonraki deyimler yürütülemez.
İmleçler üzerindeki etkisi ROLLBACK aşağıdaki kurallarla tanımlanır:
CURSOR_CLOSE_ON_COMMITolarak ayarlandığındaONROLLBACK, tüm açık imleçleri kapatır ancak serbest bırakmaz.CURSOR_CLOSE_ON_COMMITolarak ayarlandığındaOFF,ROLLBACKtamamen doldurulmuş açık zaman uyumluSTATICveyaINSENSITIVEimleçler veya zaman uyumsuzSTATICimleçler etkilenmez. Başka bir türe ait açık imleçler kapatılır ancak serbest bırakılmaz.Bir toplu işlemi sonlandıran ve işlemi geri alan bir hata, hatayı oluşturan deyimini içeren toplu işte bildirilen tüm imleçleri serbest bırakıyor. Türüne veya ayarına
CURSOR_CLOSE_ON_COMMITbakılmaksızın tüm imleçler serbest bırakılır. Bu, hatayı oluşturan toplu işlem tarafından çağrılan saklı yordamlarda bildirilen imleçleri içerir. Hatayı oluşturan toplu işlemden önce toplu işte bildirilen imleçler önceki iki kurala tabidir.Kilitlenme, bu tür bir hatanın örneğidir. Tetikleyicide
ROLLBACKverilen bir deyim de bu davranışa neden olur.
Kilitleme davranışı
ROLLBACK TRANSACTION
savepoint_name belirten bir deyim, yükseltilen ve dönüştürülen kilitler dışında, kayıt noktasının ötesinde alınan tüm kilitleri serbest bırakır. Bu kilitler serbest bırakılmaz ve önceki kilit moduna geri dönüştürülemez.
Permissions
Rolde public üyelik gerektirir.
Examples
Aşağıdaki örnek, adlandırılmış bir işlemi geri döndürmenin etkisini gösterir. Bir tablo oluşturduktan sonra, aşağıdaki deyimler adlandırılmış bir işlem başlatır, iki satır ekler ve değişkeninde @TransactionNameadlı işlemi geri alır. Adlandırılmış işlemin dışındaki başka bir deyim iki satır ekler. Sorgu, önceki deyimlerin sonuçlarını döndürür.
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;
Sonuç kümesi aşağıdadır.
value
-----
3
4