Parece que usted está tratando de utilizar los comandos de DOS para crear un archivo por lotes que (a) realiza otra archivos por lotes o (b) ejecuta SQLCMD para ejecutar sql o un script sql.
Aquí hay un par de ejemplos, todo en uno. Estoy usando el comando de DOS START
con el interruptor /WAIT
, que mantendrá su archivo de lote original "master" ejecutándose en una ventana y ejecutará el archivo o los comandos subsiguientes en una nueva ventana. Esa nueva ventana permanece abierta hasta que el script finalice Y finalice.
Algunas de las ECHO
probablemente no sean necesarias, pero la secuencia de comandos te responderá por ahora, un poco.
@echo off
Por lo tanto, esto es bastante simple en el sentido de que solo está ejecutando el script. Si eres script1.bat tiene puntos de interrupción, puedes devolver un error al script principal y que finalice de inmediato. No estaba claro si eso era lo que necesitabas para hacer el script maestro.
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
Aquí es donde tuvo utilizado el mismo START/WAIT para funcionar SQLCMD, que en este caso sólo devuelve los resultados de la consulta. Una cosa a tener en cuenta aquí es que el -Q
(mayúscula) ejecuta la consulta y se cierra. Si usa -q
(en minúscula) ejecutará la consulta y se abrirá en SQLCMD esperando otra consulta.
echo.
echo Running SQLCMD: "select top 100 * from sys.objects"
start /wait sqlcmd -S (local) -Q "select top 100 * from sys.objects"
y es así como se puede ejecutar una secuencia de comandos SQL, que es lo que el -i
denota, pero tampoco ha ejecutado este en el START/WAIT como antes. No es que tengas que hacerlo, pero quería mostrar ambos ejemplos. Lo que también muestra es que el -b
finalizará el proceso por lotes si el script devuelve un error, lo que es útil si está ejecutando varios scripts que dependen del éxito del anterior (s).
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
Entonces, supuse que estabas buscando un archivo .bat o .cmd que utilizara SQLCMD. El ejemplo que proporcioné es bastante básico, pero espero que te coloque en el camino correcto.
OH! Y recuerde que CTRL + C rompe un script por lotes en proceso.
que nos está diciendo lo que ejecutó , y el error, pero no ** cómo lo ejecutaste **. –
Parece que está tratando la secuencia de comandos por lotes como una consulta SQL. La sintaxis es bastante diferente. El ": r" es su función, que solo llama al archivo por lotes. El "IR" es innecesario. Es probable que haya una forma más limpia de crear un control de errores y se llamen a varios comandos. A partir de la llamada al archivo por lotes, es probable que desee utilizar "INICIAR/ESPERA" para que su archivo de proceso por lotes original no finalice antes que el que ha llamado desde allí. ¿Puedes publicar detalles adicionales? – Vinnie