2016-06-16 1 views
0

Ce script traite tous les fichiers sql d'un dossier donné et affiche le résultat dans un fichier csv. Avez-vous des idées comment pourrais-je l'adapter pour réessayer le fichier sql en cas d'erreur ou d'échec?Réessayer une requête sql en cas d'échec dans le lot

@ECHO OFF 

SET SQLCMD="C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" 
SET PATH="C:\Users\username\Desktop\Scripts\Reports\sql" 
SET SERVER="localhost" 
SET DB="database" 
SET LOGIN="username" 
SET PASSWORD="password" 
SET OUTPUT="C:\Users\username\Desktop\Scripts\Reports\output_%date%-%time:~0,2%-%time:~3,2%-%time:~6,2%.csv" 

CD %PATH% 

ECHO %date% %time% > %OUTPUT% 

for %%f in (*.sql) do (
%SQLCMD% -S %SERVER% -d %DB% -E -i %%~f >> %OUTPUT% -W -w 1024 -s";") 

Merci!

+0

Les freins de la requête parce que la connexion au serveur tombe parfois. – redviper2100

Répondre

1

Vous ne pouvez pas tester la variable d'environnement ERRORLEVEL. typiquement une valeur zéro ERRORLEVEL signifie le succès. Vous devez également activer l'extension différée pour la vérifier dans un bloc.

quelque chose comme ça peut aider,

SetLocal EnableDelayedExpansion 
for %%f in (*.sql) do (
    Set /a success=1 
    for /L %%w in (1,1,5) do (rem retry five times 
    if !success! NEQ 0 (
     %SQLCMD% -S %SERVER% -d %DB% -E -i %%~f >> %OUTPUT% -W -w 1024 -s";" 
     if !ERRORLEVEL! EQU 0 set /a success=0 
    ) 
) 
    if !success! NEQ 0 (
    rem sql failed, log or advise 
) 
) 
EndLocal 

un autre point important, soyez prudent avec la variable d'environnement PATH . vous devriez mieux utiliser un autre nom comme SQL_PATH ou MY_PATH.

ou vous pouvez utiliser PUSHD & POPD pour changer votre travail dir

@echo off 

SET ... 

rem save current dir and jump to... 
pushd "C:\Users\username\Desktop\Scripts\Reports\sql" 

for %%f in (*.sql) do (
    ... 
    ... 
) 

rem restore dir saved by pushd 
popd 
+0

Votre idée était géniale! Merci! Je devais ajouter le -b la sortie le ERRORLEVEL – redviper2100

+0

@ redviper2100: oui, vous avez raison. Je l'ai oublié. – elzooilogico