Ejecute todos los archivos SQL en un directorio

117

Tengo varios archivos .sql que tengo que ejecutar para aplicar los cambios realizados por otros desarrolladores en una base de datos de SQL Server 2005. Los archivos se nombran de acuerdo con el siguiente patrón:

0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...

¿Hay alguna forma de ejecutarlos todos de una vez?

KAD
fuente

Respuestas:

143

Cree un archivo .BAT con el siguiente comando:

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -E -i"%%G"
pause

Si necesita proporcionar nombre de usuario y contraseña

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P 
password -i"%%G"

Tenga en cuenta que la "-E" no es necesaria cuando se proporciona el usuario / contraseña

Coloque este archivo .BAT en el directorio desde el que desea que se ejecuten los archivos .SQL, haga doble clic en el archivo .BAT y ¡listo!

Vijeth
fuente
2
cuando ejecuté el archivo por lotes, se produce un problema de autenticación que dice "Error de inicio de sesión. El inicio de sesión proviene de un dominio que no es de confianza y no se puede utilizar con la autenticación de Windows". ¿Hay alguna manera de proporcionar el nombre de usuario y la contraseña también como el nombre del servidor y la base de datos?
Sanjay Maharjan
11
@SanjayMaharjan usa -U para usuario y -P para contraseña, como:for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P "password" -i"%%G"
Rickedb
¿Cómo puedo poner la salida en archivos separados usando -o? Siempre que uso como -o temp.txt, este temp.txt se sobrescribe. Quiero obtener los archivos de salida con el mismo nombre de archivo sql.
Kevin
@vijeth: buen trabajo hombre. Estaba pensando en hacer uno por uno unos 200 archivos sql. ahorró mucho tiempo
Uthistran Selvaraj
@Vijeth gracias. Solo modifico para mí mismo: ¡¡Solo entorno de desarrollo REM REM !! REM pausa para %% G en (* .sql) do sqlcmd / S "192.168.10.139 \ SQLEXPRESS" / d "TESTDEV_DB" -U "atiour" -P "atiour" -i "%% G" pause REM REM Todo el script Ejecutar con éxito REM
atik sarker
71

Utilice FOR . Desde el símbolo del sistema:

c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
Remus Rusanu
fuente
2
Tuve que agregar comillas alrededor del último "% f" para que funcione con scripts que contienen espacios
Steve Wright
Para obtener una versión que funcione en archivos por lotes, consulte esta respuesta .
Ian Kemp
También tuve que agregar algunos otros parámetros (por ejemplo, / I para habilitar identificadores entre comillas)
Pavel K
me gusta este, pero ¿hay alguna forma de que los resultados se envíen a un archivo? para que pueda ver fácilmente las excepciones? Acabo de probar este comando en 136 archivos .sql, así que perdí la visibilidad de la mayoría de ellos
Rich
2
@Rich Para redirigir la salida a un archivo, use este comando: for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) Puede leer más sobre la redirección de la salida aquí
danijelk
26
  1. En SQL Management Studio, abra una nueva consulta y escriba todos los archivos como se muestra a continuación

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    
  2. Vaya al menú Consulta en SQL Management Studio y asegúrese de que el modo SQLCMD esté habilitado
  3. Haga clic en Modo SQLCMD; los archivos se seleccionarán en gris como se muestra a continuación

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    
  4. Ahora ejecuta
Ramakrishna Talla
fuente
3
esto es realmente tedioso si tengo cientos de archivos.
devlin carnate
1
@devlincarnate: presumiblemente puede encontrar una forma de automatizar el paso 1. Como "dir / B * .sql> list.txt", y luego masajear un poco ese archivo list.txt.
Jeff Roe
@devlincarnate en versiones más recientes de Windows, puede mantener presionada la tecla Shift, hacer clic derecho en un archivo y seleccionar "Copiar como ruta". Desde allí, presione CTRL + V en una ventana SSMS. También funciona con varios archivos. Seleccione dos o más archivos en el Explorador, haga clic con el botón derecho en cualquiera de los archivos resaltados y seleccione "Copiar como ruta". Repita los pasos en SSMS. Las rutas de archivo están encerradas entre comillas dobles, que puede o no querer eliminar en SSMS con Buscar / Reemplazar.
Dave Mason
21

Asegúrese de tener SQLCMD habilitado haciendo clic en la opción Consulta> Modo SQLCMD en el estudio de administración.

  1. Suponga que tiene cuatro archivos .sql ( script1.sql,script2.sql,script3.sql,script4.sql) en una carpeta c:\scripts.

  2. Cree un archivo de secuencia de comandos principal (Main.sql) con lo siguiente:

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    :r c:\Scripts\script4.sql

    Guarde Main.sql en c: \ scripts.

  3. Cree un archivo por lotes ExecuteScripts.batcon el siguiente nombre:

    SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
    PAUSE

    Recuerde reemplazar <YourDatabaseName>con la base de datos que desea ejecutar sus scripts. Por ejemplo, si la base de datos es "Empleado", el comando sería el siguiente:

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
    PAUSE
  4. Ejecute el archivo por lotes haciendo doble clic en el mismo.

Ashish Gupta
fuente
Acabo de editar mi respuesta. Además, es necesario asegurarse de que los archivos de script existen en la ruta especificada.
Ashish Gupta
lo bueno de este enfoque es que se encuentra cualquier error y luego deja de ejecutar más scripts :) similar al -bejemplo:SQLCMD -b -i "file 1.sql","file 2.sql"
Jaider
y lo malo de este enfoque es que uno tiene que mantener la lista de todos los archivos SQL que se van a ejecutar.
Francisco d'Anconia
10

Puede utilizar ApexSQL Propagate . Es una herramienta gratuita que ejecuta múltiples scripts en múltiples bases de datos. Puede seleccionar tantos scripts como necesite y ejecutarlos en una o varias bases de datos (incluso varios servidores). Puede crear una lista de scripts y guardarla, luego simplemente seleccione esa lista cada vez que desee ejecutar esos mismos scripts en el orden creado (también se pueden agregar varias listas de scripts):

Seleccionar guiones

Cuando se seleccionan los scripts y las bases de datos, se mostrarán en la ventana principal y todo lo que tiene que hacer es hacer clic en el botón "Ejecutar" y todos los scripts se ejecutarán en las bases de datos seleccionadas en el orden indicado:

Ejecución de scripts

Kevin L
fuente
8

Consulta general

guarde las siguientes líneas en el bloc de notas con el nombre batch.bat y colóquelas dentro de la carpeta donde están todos sus archivos de script

 for %%G in (*.sql) do sqlcmd /S servername /d databasename  -i"%%G"
    pause

EJEMPLO

para %% G en (* .sql), haga sqlcmd / S NFGDDD23432 / d EMPLYEEDB -i "%% G" pause

En algún momento, si el inicio de sesión falló, utilice el siguiente código con nombre de usuario y contraseña

for %%G in (*.sql) do sqlcmd /S SERVERNAME /d DBNAME -U USERNAME -P PASSWORD -i"%%G"
pause

para %% G en (* .sql), haga sqlcmd / S NE8148server / d EMPLYEEDB -U Scott -P tiger -i "%% G" pause

Después de crear el archivo bat dentro de la carpeta en la que se encuentran sus archivos de script, simplemente haga clic en el archivo bat, se ejecutarán sus scripts

Lijo
fuente
5

Escribí una utilidad de código abierto en C # que le permite arrastrar y soltar muchos archivos SQL y comenzar a ejecutarlos en una base de datos.

La utilidad tiene las siguientes características:

  • Arrastrar y soltar archivos de script
  • Ejecute un directorio de archivos de script
  • Sql Script envía mensajes durante la ejecución
  • Secuencia de comandos aprobada o fallida de color verde y rojo (amarillo para ejecutar)
  • Detener la opción de error
  • Abrir script en opción de error
  • Ejecutar un informe con el tiempo necesario para cada script
  • Tiempo de duración total
  • Prueba de conexión DB
  • Asincrónico
  • .Net 4 y probado con SQL 2008
  • Archivo exe único
  • Elimina la conexión en cualquier momento
Clinton Ward
fuente
4

La forma más fácil que encontré incluyó los siguientes pasos (el único requisito es estar en Win7 +):

  • abre la carpeta en el Explorador
  • seleccionar todos los archivos de script
  • presiona Shift
  • haga clic derecho en la selección y seleccione "Copiar como ruta"
  • vaya a SQL Server Management Studio
  • crear una nueva consulta
  • Menú de consulta, "modo SQLCMD"
  • pegue la lista, luego Ctrl + H, reemplace '"C: \' (o cualquier letra de la unidad) con ': r" C:' (es decir, anteponga las líneas con ': r')
  • ejecutar la consulta

Suena largo, pero en realidad es muy rápido ... (suena largo como describí incluso los pasos más pequeños)

PepiX
fuente
1
@echo off
cd C:\Program Files (x86)\MySQL\MySQL Workbench 6.0 CE

for %%a in (D:\abc\*.sql) do (
echo %%a
mysql --host=ip --port=3306 --user=uid--password=ped < %%a
)

Paso 1: las líneas anteriores se copian en el bloc de notas y se guardan como bat.

Paso 2: En la carpeta abc de la unidad d en todos los archivos Sql en las consultas ejecutadas en el servidor SQL.

Paso 3: Proporcione su IP, identificación de usuario y contraseña.

Nagaraju Chimmani
fuente
Esta pregunta está relacionada con MSSQL, no con MySQL.
Shawn
0

Puede crear un único script que llame a todos los demás.

Ponga lo siguiente en un archivo por lotes:

@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"

Cuando ejecute ese archivo por lotes, se creará un nuevo script con el nombre all.sqlen el mismo directorio donde se encuentra el archivo por lotes. Buscará todos los archivos con la extensión .sqlen el mismo directorio donde se encuentra el archivo por lotes.

Luego puede ejecutar todos los scripts usando sqlplus user/pwd @all.sql(o extender el archivo por lotes para llamar sqlplusdespués de crear el all.sqlscript)

rahul jain
fuente
0

Para ejecutar cada archivo SQL en el mismo directorio, use el siguiente comando:

ls | awk '{print "@"$0}' > all.sql

Este comando creará un solo archivo SQL con los nombres de cada archivo SQL en el directorio agregado por "@".

Una vez all.sqlcreado, simplemente ejecute all.sqlcon SQLPlus, esto ejecutará todos los archivos sql en el all.sql.

usuario7609040
fuente
0

Si puede utilizar SQL interactivo:

1 - Crea un archivo .BAT con este código:

@ECHO OFF ECHO
for %%G in (*.sql) do dbisql -c "uid=dba;pwd=XXXXXXXX;ServerName=INSERT-DB-NAME-HERE" %%G
pause

2 - Cambie pwd y ServerName.

3 - Coloque el archivo .BAT en la carpeta que contiene los archivos .SQL y ejecútelo.

Alberto Labuto
fuente