sql >> Databasteknik >  >> RDS >> Sqlserver

Måste jag räkna transaktioner innan jag återställer en i catch-block i T-SQL?

Jag startar faktiskt aldrig en ny transaktion om jag redan är med i en.

Detta handlar om kapslade lagrade processer, distribuerade TXN:er och TransactionScope

Kom ihåg att det finns inget sådant som en kapslad transaktion i SQL Server i alla fall.

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. Hur itererar man över Yii CActiveDataProvider-objekt?

  2. Hur lagrar man lösenord i databasen säkert?

  3. Viloläge skicka främmande frågor till databasen

  4. Ett bord kontra flera bord