Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment annuler ou valider une transaction dans SQL Server

La bonne nouvelle est qu'une transaction dans SQL Server peut s'étendre sur plusieurs lots (chaque exec est traité comme un lot séparé.)

Vous pouvez envelopper votre EXEC déclarations dans un BEGIN TRANSACTION et COMMIT mais vous devrez aller plus loin et revenir en arrière si des erreurs se produisent.

Idéalement, vous voudriez quelque chose comme ceci :

BEGIN TRY
    BEGIN TRANSACTION 
        exec( @sqlHeader)
        exec(@sqlTotals)
        exec(@sqlLine)
    COMMIT
END TRY
BEGIN CATCH

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

Le BEGIN TRANSACTION et COMMIT Je crois que vous êtes déjà familier avec. Le BEGIN TRY et BEGIN CATCH les blocs sont essentiellement là pour détecter et gérer les erreurs qui se produisent. Si l'un de vos EXEC génèrent une erreur, l'exécution du code passera au CATCH bloquer.

Votre code de construction SQL existant doit être en dehors de la transaction (ci-dessus) car vous souhaitez toujours que vos transactions soient aussi courtes que possible.