sql >> Databáze >  >> RDS >> Sqlserver

Jak vrátit zpět nebo potvrdit transakci v SQL Server

Dobrou zprávou je, že transakce na serveru SQL Server může zahrnovat více dávek (každá exec je považováno za samostatnou dávku.)

Svůj EXEC můžete zabalit příkazy v BEGIN TRANSACTION a COMMIT ale budete muset jít o krok dále a vrátit zpět, pokud se vyskytnou nějaké chyby.

V ideálním případě byste chtěli něco takového:

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

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

BEGIN TRANSACTION a COMMIT Věřím, že jste již obeznámeni. BEGIN TRY a BEGIN CATCH bloky jsou v podstatě tam, aby zachytily a zvládly všechny chyby, které se vyskytnou. Pokud některý z vašich EXEC příkazy vyvolávají chybu, spuštění kódu přeskočí na CATCH blok.

Váš stávající stavební kód SQL by měl být mimo transakci (výše), protože vždy chcete, aby vaše transakce byly co nejkratší.




  1. mysql - zobrazí hodnoty, které existují ve VŠECH tabulkách

  2. chyba mysql:překročen maximální počet připojení za hodinu

  3. 3 způsoby, jak vrátit počet řádků v každém oddílu na serveru SQL (T-SQL)

  4. Jak zdědím privilegia role?