sql >> Database teknologi >  >> RDS >> Sqlserver

Skal jeg tælle transaktioner før rollback en i catch-blok i T-SQL?

Faktisk starter jeg aldrig en ny transaktion, hvis jeg allerede er i en.

Dette omhandler indlejrede lagrede procs, distribuerede TXN'er og TransactionScope

Husk, der er ikke sådan noget som en indlejret transaktion i SQL Server alligevel.

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. C# DateTime skifter til et andet format

  2. Hvordan man vælger baseret på værdien af ​​en anden SELECT

  3. tildele mysql-værdi til variabel inline

  4. Hvordan kontrollerer man, om der findes en database og tabeller i sql-serveren i et vb .net-projekt?