sql >> Database >  >> RDS >> Sqlserver

Moet ik transacties tellen voordat ik er een terugdraai in het catch-blok in T-SQL?

Eigenlijk start ik nooit een nieuwe transactie als ik er al een heb.

Dit gaat over geneste opgeslagen processen, gedistribueerde TXN's en TransactionScope

Onthoud, er is niet zoiets als een geneste transactie in SQL Server hoe dan ook.

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. Zijn er andere goede CachedRowSet-implementaties dan de gepatenteerde Sun-implementatie?

  2. Ruby on Rails:moet voorkomen in de GROUP BY-clausule of worden gebruikt in een aggregatiefunctie

  3. Geen volledige reeksvermenigvuldiging (product) ontvangen in CONNECT-BY-query

  4. door komma's gescheiden lijst in de buurt van 'xx.yy' ongeldig krijgen met dbms_utility.comma_to_table