Comment pouvons-nous dire SQLCMD de continuer « en cas d'erreur » avec lot suivant?

StackOverflow https://stackoverflow.com/questions/1174231

  •  19-09-2019
  •  | 
  •  

Question

Toutes les idées sur la façon d'y arriver?

USE [db_name]
BEGIN TRANSACTION
...TONS OF INSERTS
COMMIT;
RAISERROR (..) WITH NOWAIT;  //If error continue with next batch

BEGIN TRANSACTION
...TONS OF INSERTS
COMMIT;
RAISERROR (..) WITH NOWAIT;

...
Était-ce utile?

La solution

Le comportement d'interruption de traitement par lots en cas d'erreur est une option de SQL Server (c.-à-back-end.) Et est régie par la gravité de l'erreur. Il n'y a aucun moyen de modifier le comportement du serveur, les erreurs qui interrompent le lot toujours interrompre le traitement par lots, période.

Le comportement de poursuite de fichier (exécuter la prochaine GO délimitée lot après erreur) est une option sqlcmd et est commandé par le commutateur -b. Par défaut est activé (ce qui signifie sqlcmd se poursuit avec le lot suivant).

Autres conseils

Utilisez l'indicateur -V sur la ligne de commande. Si vous définissez une valeur suffisamment important (17 par exemple), même n'arrêteront pas le script des erreurs assez graves.

par exemple. sqlcmd ... -V 17 -i MyFile.sql

Je suppose que vous savez ce que vous faites quand vous faites cela et surveillez néanmoins les messages d'erreur.

Vous pouvez aller plus haut, jusqu'au niveau 25, mais si vous obtenez des erreurs entre le niveau 17 et 25, il est peu probable que vous allez être en mesure de progresser beaucoup parce qu'ils ont tendance à être causées par des erreurs logicielles ou matérielles sur le serveur, plutôt que des erreurs dans les scripts en cours de saisie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top