Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como reverter ou confirmar uma transação no SQL Server


A boa notícia é que uma transação no SQL Server pode abranger vários lotes (cada exec é tratado como um lote separado.)

Você pode envolver seu EXEC instruções em um BEGIN TRANSACTION e COMMIT mas você precisará dar um passo adiante e reverter se ocorrer algum erro.

O ideal é que você queira algo assim:
BEGIN TRY
    BEGIN TRANSACTION 
        exec( @sqlHeader)
        exec(@sqlTotals)
        exec(@sqlLine)
    COMMIT
END TRY
BEGIN CATCH

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

A BEGIN TRANSACTION e COMMIT Acredito que você já esteja familiarizado. O BEGIN TRY e BEGIN CATCH os blocos estão basicamente lá para capturar e lidar com quaisquer erros que ocorram. Se algum de seus EXEC instruções geram um erro, a execução do código irá pular para o CATCH quadra.

Seu código de construção SQL existente deve estar fora da transação (acima), pois você sempre deseja manter suas transações o mais curtas possível.