2010-09-25 5 views
6

Sono sicuro che è stato chiesto in precedenza ma non riesco a trovare istruzioni chiare su come creare un file batch in modo da chiamarlo "Aggiorna database "questo file batch dovrebbeHai bisogno di aiuto per scrivere il file bat che esegue gli script sql in (SQL Server 2008 e altri 3 file.?

eseguire script SQL ubicati in cartelle diverse eseguire un altro file 3 pipistrello.

Eventuali esempi veloci come farlo? mai fatto prima thanks a lot

CURA

Posso fare questo?

:On Error exit 

:r C:\myPath\MasterUpdateDatabase.bat 
GO 
SQLCMD -S (Local) -i C:\myPath\InsertUsername.sql 

ottengo un errore:

"GO" is not recognized as internal external command

Grazie per ogni ingresso

+0

Ci stai dicendo che cosa si eseguisse e l'errore, ma non ** come lo hai eseguito **. –

+0

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

risposta

4

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.

1

L'errore reale che si sta verificando è che l'interprete della riga di comando non riconosce "VAI", quindi è sufficiente rimuovere quella linea.

0

Spero che questo ti aiuta:

sqlplus UserName/[email protected] @C:\myPath\InsertUsername.sql 

P.S: Non dimenticate di aggiungere il comando "commit;" alla fine del file SQL (InsertUsername.sql), questo ordine di comando di Oracle per salvare le modifiche effettuate in darabase

-1

Questa risposta sicuramente funziona per i vostri scopi:

sqlcmd -S localhost -U fdmsusr -P fdmsamho -i "E:\brantst\BranchAtt.sql" -o "E:\brantst\branchlog.txt"

+0

Cosa nella tua risposta è diverso da ciò che l'interrogante ha già provato? –

+0

preferisci spiegare perché la tua risposta risolverebbe il suo problema –

Problemi correlati