Sembra che si sta cercando di utilizzare i comandi DOS per creare un file batch che (a) esegue altre file batch o (b) esegue SQLCMD per eseguire sql o uno script sql.
Ecco un paio di esempi tutti riuniti in uno. Sto utilizzando il comando DOS START
con lo switch /WAIT
, che manterrà il file batch "master" originale in esecuzione in una finestra ed eseguirà il file o i comandi successivi in una nuova finestra. Quella nuova finestra rimane aperta finché lo script non termina E esce.
Alcuni dei ECHO
s probabilmente non sono necessari, ma per ora lo script vi risponderà un po '.
@echo off
Quindi, questo è piuttosto semplice nel senso che si sta solo eseguendo la sceneggiatura. Se sei script1.bat ha punti di interruzione, puoi restituire un errore allo script principale e farlo terminare immediatamente. Non ero chiaro se fosse quello che ti serviva lo script master.
echo Starting Database Update.
echo.
echo Excuting Script 1
echo.
start /wait C:\path\to\your\script1.bat
echo If there was a problem, break here.
Pause
echo Excuting Script 2
echo.
start /wait C:\path\to\your\script2.bat
echo If there was a problem, break here.
Pause
Qui è dove ha usato lo stesso START/ora di correre SQLCMD, che in questo caso solo restituisce i risultati della query. Una cosa da notare qui è che il -Q
(maiuscolo) esegue la query e si chiude. Se si utilizza -q
(lettere minuscole), verrà eseguita la query e si aprirà in SQLCMD in attesa di un'altra query.
echo.
echo Running SQLCMD: "select top 100 * from sys.objects"
start /wait sqlcmd -S (local) -Q "select top 100 * from sys.objects"
e in questo modo è possibile eseguire uno script SQL, che è ciò che il -i
denota, ma ho anche non eseguire questo nel START/WAIT come in precedenza. Non che tu debba, ma volevo mostrare entrambi gli esempi. Ciò dimostra anche che lo -b
interromperà il processo batch se lo script restituisce un errore, che è utile se stai eseguendo più script che dipendono dal successo dei precedenti.
echo.
echo Running SQLCMD from an (-i)nput file:
sqlcmd -S (local) -i C:\path\to\your\script.sql -b
echo.
echo Update Complete.
pause
End
Così, ho pensato che stavi cercando un file .bat o .cmd che utilizzava SQLCMD. L'esempio che ho fornito è piuttosto semplice, ma spero che ti metta sulla giusta strada.
OH! E ricorda che CTRL + C interrompe uno script batch in elaborazione.
Ci stai dicendo che cosa si eseguisse e l'errore, ma non ** come lo hai eseguito **. –
Sembra che tu stia trattando lo script batch come una query SQL. La sintassi è abbastanza diversa. ": R" è la tua funzione, che chiama solo il file batch. Il "GO" non è necessario. C'è probabilmente un modo più semplice per creare una gestione degli errori e chiamare più comandi. Dalla chiamata al file batch, probabilmente vorrai usare "START/WAIT" in modo che il tuo file batch originale non finisca prima di quello che hai chiamato da dentro. Sei in grado di pubblicare ulteriori dettagli? – Vinnie