2017-03-07 1 views
2

Lors de l'exécution de plusieurs instructions :CONNECT dans un script T-SQL en cas d'échec de la connexion, le reste du script n'est pas exécuté.SQLCMD Gestion des erreurs de connexion

Y at-il des commandes SQLCMD pour fonctionner en tant que bloc Try/Catch pour gérer l'erreur de connexion? Je suis conscient qu'un T/SQL Try/Catch ne serait pas valide car les commandes SQLCMD sont exécutées avant le code SQL.

Répondre

1

Vous pouvez placer votre code sqlcmd dans un fichier batch, puis exécuter le fichier de commandes (comme suggéré here).

Vous pouvez utiliser l'option -S pour spécifier le serveur auquel vous souhaitez vous connecter, et l'option -Q pour spécifier votre code TSQL (plus d'informations sur MSDN).

Par exemple:

sqlcmd -S WrongServerName -Q "select @@servername" 
sqlcmd -S CorrectServerName -Q "select @@servername" 

pause 

la première commande échouera (si WrongServerName est un serveur non existant ou hors ligne), tandis que le second sera exécuté (si CorrectServerName est un serveur en ligne) et retournera Le nom du serveur.

+0

Merci pour votre aide. Existe-t-il des solutions autres que l'utilisation de fichiers batch? La raison pour laquelle je demande est que les scripts sont pris d'une colonne à l'intérieur d'une table et ensuite réunis pour faire un grand script qui traverse plusieurs serveurs –

+1

@RyanGillooly Oui, je vois votre point: Je ne sais pas s'il y a un plus mécanisme avancé pour la gestion des erreurs dans SQLCMD. J'utilise cette approche parce que j'exécute des instructions TSQL simples, donc les fichiers batch sont une bonne solution pour moi. Je comprends que si vous devez exécuter des scripts complexes, cette solution serait probablement inadéquate. J'ai lu une fois à propos de variable ERRORLEVEL, mais je pense qu'il ne traite que les erreurs renvoyées par les commandes DOS. Je suis désolé de ne pas pouvoir vous aider davantage. – Andrea