Erreur de Manipulation avec le Fichier Batch & Sqlcmd
J'ai un lot de fichiers qui s'exécute certaines requêtes de sélection à l'aide de l'utilitaire sqlcmd, met les résultats dans des fichiers texte, et télécharge les fichiers sur un serveur FTP. C'est tout le travail juste la façon dont il devrait être, ce qui est la façon dont j'aime des choses à travailler.
Je me demandais ce que je ferais dans le cas d'une erreur, cependant. Disons que quelqu'un modifie la structure de données de la base de données, je suis en train de frapper et ne pas m'avertir. Si j'ai couru un sqlcmd instruction SELECT et abandonné le résultat dans un fichier texte, je voudrais juste retrouver avec un fichier texte contenant une erreur, ce qui serait alors aller directement sur le FTP comme si de rien n'était faux. (J'ai testé).
Je voudrais être en mesure de vérifier pour les erreurs provenant de sqlcmd--délais d'attente, les informations d'identification incorrectes, d'une malformation de la requête, etc etc, je ne suis pas sûr de savoir comment c'est fait ou ce que les "meilleures pratiques". Je pouvais toujours essayer d'analyser le fichier texte de sortie et de recherche pour les erreurs je pense qu'il pourrait arriver, mais c'est problématique pour un certain nombre de raisons.
Quelqu'un a une expérience avec ce qu'ils venaient de partager?
OriginalL'auteur SuperNES | 2011-04-26
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vérifier
errorlevel
retourné à partir deSQLCMD
pour voir si elle a échoué.Merci pour le commentaire, j'ai mis à jour la réponse pour tenir compte de votre suggestion.
OriginalL'auteur
Je voudrais peut-être commencer par mettre les valeurs de retour dans votre SQL, comme suit:
Vous pourriez prendre un peu plus loin et utiliser des blocs TRY/CATCH pour intercepter les erreurs et retourner un code d'erreur. Avec SQLCMD, vous pouvez utiliser le code de retour de votre SQL dans le code de sortie de l'application, comme suit:
Si vous étiez à la gestion de votre SQLCMD appels avec quelque chose comme un planificateur de tâches, vous pourriez prendre des mesures fondées sur les déclarations des codes de SQLCMD. Puisque vous êtes juste en utilisant des fichiers batch, je pense que vous pouvez faire quelque chose comme ceci:
Bonne chance!
OriginalL'auteur
Code ci-dessus une boucle sur tous les *.sql dans un dossier. Si l'erreur rencontrée dans aucun script , une erreur se connecté dans le output.txt fichier et il va arrêter le processus de traitement par lots immédiatement.
OriginalL'auteur
J'ai construit un minilanguage en python pour résoudre un problème similaire. À l'aide de la sous-processus de la bibliothèque, vous pouvez exécuter votre code par sqlcmd, puis prenez la sortie et tous les codes d'erreur. Analyser les données en sortie avant de le mettre dans votre fichier texte, et, si nécessaire, aller à travers les états de réparation de erreur. Ces états peuvent modifier le code ou d'options et de réessayer de les envoyer par le biais de l'utilitaire sqlcmd. Si tout le reste échoue, l'email de l'homme.
Bien sûr, depuis que j'ai été à l'aide de python comme ça, je ne vous embêtez pas avec sqlcmd à tous et juste utilisé le odbc bibliothèques python pour une connexion directe à la base de données. Je pourrais restauration de mes transactions si j'ai eu une panne catastrophique, l'exécuter en mode interactif, ou via un fichier de commande etc. etc.
C'est un tas de travail. Pour plus simpliste de vérification d'erreur, il suffit d'ajouter un filtre pour votre pipeline, dire grep ou awk. Ou rouler avec flex.
OriginalL'auteur