sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo revertir o confirmar una transacción en SQL Server

La buena noticia es que una transacción en SQL Server puede abarcar varios lotes (cada uno exec se trata como un lote separado).

Puede envolver su EXEC declaraciones en un BEGIN TRANSACTION y COMMIT pero deberá ir un paso más allá y retroceder si se produce algún error.

Idealmente, querrías algo como esto:

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

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

El BEGIN TRANSACTION y COMMIT Creo que ya estás familiarizado. El BEGIN TRY y BEGIN CATCH los bloques están básicamente ahí para capturar y manejar cualquier error que ocurra. Si alguno de sus EXEC las declaraciones generan un error, la ejecución del código saltará a CATCH bloquear.

Su código de construcción de SQL existente debe estar fuera de la transacción (arriba), ya que siempre desea que sus transacciones sean lo más breves posible.