3902: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION
SQL ServerNe demek?
Bir COMMIT TRANSACTION çalıştırıldı ancak ona karşılık gelen açık bir BEGIN TRANSACTION yok. Transaction sayacı (@@TRANCOUNT) sıfır olduğundan commit edilecek bir transaction bulunamadı.
Neden olur?
Dengesiz BEGIN/COMMIT/ROLLBACK kullanımı, hata sonrası transaction'ın zaten geri alınmış olması, iç içe transaction sayımının hatalı yönetilmesi veya CATCH bloğunda ROLLBACK sonrası tekrar COMMIT çağrılması.
Nasıl çözülür?
BEGIN ve COMMIT sayısını dengeleyin. Commit'ten önce @@TRANCOUNT değerini kontrol edin (IF @@TRANCOUNT > 0 COMMIT). TRY...CATCH içinde hata olduğunda XACT_STATE()/@@TRANCOUNT'a göre ROLLBACK yapın ve gereksiz COMMIT'i önleyin. İç içe transaction mantığını gözden geçirin.
Aynı motorda diğer kayıtlar
- 2714There is already an object named in the database
- 601Could not continue scan with NOLOCK due to data movement
- 50000Custom error raised with RAISERROR
- 1101Could not allocate a new page because of insufficient disk space in filegroup
- 3729Cannot DROP because it is being referenced by object
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths