Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Трябва ли да преброя транзакциите, преди да върна една назад в catch блока в T-SQL?

Всъщност никога не започвам нова транзакция, ако вече съм в такава.

Това се занимава с вложени съхранени процедури, разпределени TXN и TransactionScope

Не забравяйте, че има няма такова нещо като вложена транзакция в SQL Server така или иначе.

DECLARE @StartTranCount int

BEGIN TRY
    SET @StartTranCount = @@TRANCOUNT
    IF @StartTranCount = 0 BEGIN TRAN
        -- my code
    IF @StartTranCount = 0 COMMIT TRAN
END TRY
BEGIN CATCH
    IF @StartTranCount = 0 AND @@trancount > 0
    BEGIN
        ROLLBACK TRAN
        DECLARE @message NVARCHAR(MAX)
        DECLARE @state INT
        SELECT @message = ERROR_MESSAGE(), @state = ERROR_STATE()
        RAISERROR (@message, 11, @state)
    END
    /*
    or just
    IF @StartTranCount = 0 AND @@trancount  
        ROLLBACK TRAN
    */
END CATCH


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да премахнете всички завършващи числа от низ?

  2. Начини да знаете как да се справите с корупцията в базата данни в SQL Server

  3. Условието за филтриран индекс се игнорира от оптимизатора

  4. Не може да се свърже със сървъра за отчети 2008 r2

  5. Актуализиране на ред в таблица въз основа на подзаявка на същата таблица