2010-09-25 14 views
6

Estoy seguro de que esto se ha preguntado antes pero no puedo encontrar instrucciones claras sobre cómo crear un archivo por lotes , llámenlo "Actualizar base de datos "este archivo por lotes debeNecesito ayuda para escribir un archivo bat que ejecute scripts sql en (sql server 2008 y otros 3 archivos.?

Ejecutar secuencias de comandos SQL ubicados en diferentes carpetas ejecutar otro archivos 3 de murciélago.

Cualquier rápidos ejemplos de cómo hacerlo? Nunca hecho antes muchas gracias

EDITADO

¿Puedo hacer esto?

:On Error exit 

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

Me aparece un error:

"GO" is not recognized as internal external command

Gracias por cualquier entrada

+0

que nos está diciendo lo que ejecutó , y el error, pero no ** cómo lo ejecutaste **. –

+0

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

Respuesta

4

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.

1

El error real que está viendo es que el intérprete de línea de comandos no reconoce 'IR', por lo que podría simplemente eliminar esa línea.

0

espero que esto le ayuda a:

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

P.S: No se olvide de agregar el comando "comprometerse"; al final del archivo sql (InsertUsername.sql), este orden de comandos de Oracle para guardar los cambios realizados en darabase

-1

Esta respuesta definitivamente funciona para sus propósitos:

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

+0

¿Qué en su respuesta es diferente de lo que el interrogador ya probó? –

+0

prefieres explicar por qué tu respuesta resolvería su problema –

Cuestiones relacionadas