2012-02-06 14 views
12

Sto cercando di eseguire uno script SQL da un file utilizzando sqlcmd, utilizzando il seguente comando:Come eseguire un file di script SQL utilizzando sqlcmd e l'uscita sia guscio e il file

sqlcmd -S <server> -d <database> -i <input file> -o <output file> 
     -U <user> -P <password> 

eseguo il mio sql file e output in un file di registro.

Il problema è questa modifica l'uscita di sqlcmd nel file .. e voglio ottenere l'output anche alla shell.

+0

hai trovato una risposta per questo? per favore se ce l'hai, rispondi qui, e rispondi alla mia domanda: http://stackoverflow.com/questions/9319025/sqlcmd-with-output-file-and-screen-output in modo da votare la tua risposta se funziona. Grazie! :) –

+0

@Leandro mi dispiace non ha ancora trovato una risposta .... –

risposta

7

@Noam,

C'è un programma standard nel mondo UNIX che legge da stdin e scrive stdoute in un file specificato: il comando tee. Il seguente esempio elenca la directory corrente stdout ea "myfile":

$ ls | tee "myfile" 

Ci sono alcuni porti open-source per Windows, come wintee, ed è persino banale per rendere la propria implementazione (vedi here) , ma PowerShell ha in realtà già questa utilità incorporata: il seguente esempio Tee-Object .Il è analoga alla precedente, in PowerShell:

PS [c:\tmp] 
> dir | tee myDirContents.txt 

Quindi, il seguente comando eseguirà MyScript.sql in myserver, utilizzando le credenziali Windows correnti e il suo risultato sarà di uscita sia per la console e a "result.txt":

PS [c:\tmp] 
> sqlcmd -i mysrcipt.sql -S myserver -E | tee "result.txt" 
3

@Noam, anche se non riuscivo a trovare un modo di duplicare il gestore STDOUT, una soluzione che forse risolvere il problema è quello di eseguire lo script SQL nel file di output (cioè result.txt) e quindi utilizzare type result.txt per la stampa in STDOUT.

c:>sqlcmd -i mysrcipt.sql -o result.txt -S myserver -E 
c:>type result.txt 

Se si ha realmente bisogno di duplicare il gestore (forse il comando richiede un sacco di tempo e non si vuole aspettare fino a che non finisce prima di ottenere le prime file), è possibile effettuare un semplice programma per copiare gli input da STDIN in STDOUT e anche in un file. Poi si potrebbe riscrivere il comando come:

c:>sqlcmd -i mysrcipt.sql -S myserver -E > duplicate.exe "result.txt" 
0

Questo codice può essere utilizzato per la connessione che richiede l'autenticazione

sqlcmd -S "server_name" -d "database_name" -i "input_file" -o "output_file" -U "user_name" -P "password" 
+0

-U & -P è per server o database? – ExploringApple

Problemi correlati