De sortie et de retour en arrière tout en script en cas d'erreur

J'ai un script TSQL qui fait beaucoup d'ajustements de la structure de la base de données mais ce n'est pas vraiment sûr que de laisser aller de travers quand quelque chose tombe en panne.

à mettre les choses au clair:

  • à l'aide de MS SQL 2005
  • ce n'est PAS une procédure stockée, juste un fichier de script (.sql)

ce que j'ai, c'est quelque chose dans l'ordre suivant

BEGIN TRANSACTION
    ALTER Stuff
    GO

    CREATE New Stuff
    GO

    DROP Old Stuff
    GO
IF @@ERROR != 0
    BEGIN
  PRINT 'Errors Found ... Rolling back'
  ROLLBACK TRANSACTION
  RETURN
    END
ELSE
     PRINT 'No Errors ... Committing changes'
     COMMIT TRANSACTION

juste pour illustrer ce que je suis en train de travailler avec ... ne peut pas aller dans les détails
maintenant, le problème ...

Quand je introduire une erreur (pour tester si les choses se roula en arrière), j'obtiens une déclaration que le ROLLBACK TRANSACTION ne pouvait pas trouver un correspondant de COMMENCER l'OPÉRATION.
Cela me mène à croire que quelque chose de VRAIMENT mauvais et que la transaction a déjà été tué.
ce que j'ai aussi remarqué, c'est que le script n'a pas de quitter complètement en erreur et N'a donc essayez d'exécuter chaque instruction après l'erreur s'est produite. (Je l'ai remarqué lorsque de nouvelles tables ont montré jusqu'à quand je ne m'y attendais pas, car il doit avoir rollbacked)

OriginalL'auteur Jan W. | 2010-05-26