SQL Server - transactions revenir sur l'erreur?
Nous avons application client qui exécute SQL sur un Serveur SQL server 2005, telles que les suivantes:
BEGIN TRAN;
INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
COMMIT TRAN;
Il est envoyé par une longue chaîne de commandement.
Si l'un des inserts d'échouer, de tout ou partie de la commande échoue, SQL Server annuler la transaction? Si ce n'est pas la restauration, dois-je envoyer une deuxième commande pour le restaurer?
Je peux donner des détails au sujet de l'api et de la langue que j'utilise, mais je pense que SQL Serveur doit répondre la même chose pour n'importe quelle langue.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez mettre
set xact_abort on
avant votre transaction assurez-vous que sql annule automatiquement en cas d'erreur.xact_abort
est au niveau de la connexion.Vous sont corrects dans l'ensemble de la transaction sera annulée. Vous devez émettre la commande de rouler en arrière.
Vous pouvez envelopper ce dans un
TRY CATCH
bloc comme suitIF @@TRANCOUNT > 0
?try
), mais le code ne fonctionne pas après. Il n'y a plus de transaction, mais vous allez encore dans lecatch
.Voici le code à recevoir le message d'erreur de travailler avec MSSQL Server 2016:
DECLARE @Var TYPE; SET @Var = ERROR;
pour déclencher des erreurs de sql server 2005. Sinon, le code ci-dessus pour la levée des erreurs travaille pour les plus âgés DB est trop. Essayez d'affecter une valeur par défaut à une variable locale est ce qui causait problème.De MDSN article, Contrôle Des Transactions (Moteur De Base De Données).
Dans votre cas, il aura un rollback de la transaction complète lorsque l'un des inserts échouer.
Non, il n'est pas.
Sûr, vous devriez problème
ROLLBACK
au lieu deCOMMIT
.Si vous voulez décider de valider ou d'annuler la transaction, vous devez supprimer le
COMMIT
phrase de la déclaration, de vérifier les résultats de l'insère et puis le problème soitCOMMIT
ouROLLBACK
selon les résultats de la vérification.Named Pipes
ouTCP
) interrompt la connexion. Lorsqu'une connexion est interrompue,SQL Server
s'arrête toutes les commandes en cours d'exécution et des restaurations de la transaction.