sql >> Database >  >> RDS >> Sqlserver

Hoe u een transactie terugdraait of vastlegt in SQL Server

Het goede nieuws is dat een transactie in SQL Server meerdere batches kan omvatten (elke exec wordt behandeld als een afzonderlijke batch.)

U kunt uw EXEC . inpakken verklaringen in een BEGIN TRANSACTION en COMMIT maar je moet een stap verder gaan en terugdraaien als er fouten optreden.

Idealiter zou je zoiets als dit willen:

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

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

De BEGIN TRANSACTION en COMMIT Ik geloof dat je al bekend bent met. De BEGIN TRY en BEGIN CATCH blokken zijn er in principe om eventuele fouten op te vangen en af ​​te handelen. Als een van uw EXEC instructies geven een fout, de uitvoering van de code springt naar de CATCH blok.

Uw bestaande SQL-bouwcode moet buiten de transactie (hierboven) staan, omdat u uw transacties altijd zo kort mogelijk wilt houden.




  1. ORACLE Selecteer Distinct retourneer veel kolommen en waar

  2. Geaggregeerde functies op meerdere samengevoegde tabellen

  3. MySQL Selecteer ID's die voorkomen op verschillende rijen met meerdere specifieke waarden voor een kolom

  4. Retourneer alleen numerieke waarden in MariaDB