Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да върнете назад или да извършите транзакция в SQL Server

Добрата новина е, че една транзакция в SQL Server може да обхваща множество партиди (всеки exec се третира като отделна партида.)

Можете да опаковате своя EXEC изявления в BEGIN TRANSACTION и COMMIT но ще трябва да отидете още една стъпка и да се върнете назад, ако възникнат грешки.

В идеалния случай бихте искали нещо подобно:

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

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

BEGIN TRANSACTION и COMMIT Вярвам, че вече сте запознати с. BEGIN TRY и BEGIN CATCH блоковете основно са там, за да улавят и обработват всички възникнали грешки. Ако някой от вашите EXEC операторите пораждат грешка, изпълнението на кода ще премине към CATCH блок.

Вашият съществуващ код за изграждане на SQL трябва да е извън транзакцията (по-горе), тъй като винаги искате да поддържате транзакциите си възможно най-кратки.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Оператор insert exec не може да бъде вложен

  2. Как мога да получа номера на месеца (не името на месеца) от дата в SQL Server?

  3. Как да насоча таблица за година в SQL?

  4. Стартирайте .sql файл от приложение в C#, като използвате SMO библиотека

  5. Зареждане на SQL Express от WiX?