Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy muszę liczyć transakcje przed wycofaniem jednej w bloku catch w T-SQL?

Właściwie nigdy nie rozpoczynam nowej transakcji, jeśli już w niej jestem.

Dotyczy to zagnieżdżonych przechowywanych procesów, rozproszonych TXN i TransactionScope

Pamiętaj, że istnieje nie ma czegoś takiego jak zagnieżdżona transakcja w SQL Server w każdym razie.

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. Wstaw zbiorczy w SQL Server CE

  2. Jak znaleźć procedury składowane według nazwy?

  3. Msg 102, Poziom 15, Stan 1, Wiersz 1 Nieprawidłowa składnia w pobliżu „ ”

  4. Indeksy wielokrotne a indeksy wielokolumnowe

  5. Jak mogę uzyskać zrzut SQL bazy danych SQL Server 2008?