Ejecute todos los archivos SQL en un directorio
-
24-09-2019 - |
Pregunta
Tengo varios archivos .sql que tengo que ejecutar para aplicar los cambios realizados por otros desarrolladores en una base de datos 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 manera de ejecutarlos todos de una vez?
Solución
Cree un archivo .bat con el siguiente comando:
for %%G in (*.sql) do sqlcmd /S servername /d databaseName -E -i"%%G"
pause
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 termine.
Otros consejos
Usar POR. Desde el símbolo del sistema:
c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
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
- Vaya al menú de consulta en SQL Management Studio y asegúrese de que el modo SQLCMD esté habilitado
Haga clic en el 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
- Ahora ejecutar
Asegúrese de tener habilitado SQLCMD haciendo clic en la opción de modo de consulta> SQLCMD en el estudio de administración.
Supongamos que tiene cuatro archivos .sql (
script1.sql,script2.sql,script3.sql,script4.sql
) en una carpetac:\scripts
.Cree un archivo de script 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
Guardar el main.sql en c: scripts en sí.
Crear un archivo por lotes llamado
ExecuteScripts.bat
con lo siguiente:SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql PAUSE
Recuerda reemplazar
<YourDatabaseName>
Con la base de datos 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
Ejecute el archivo por lotes haciendo doble clic en lo mismo.
Podrías usar Propagar APEXSQL. 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 múltiples bases de datos (incluso múltiples servidores). Puede crear la lista de scripts y guardarla, solo seleccione esa lista cada vez que desee ejecutar esos mismos scripts en el orden creado (también se pueden agregar múltiples listas de scripts):
Cuando se seleccionan scripts y 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 bases de datos seleccionadas en el orden dado:
Consulta general
Guarde las líneas a continuación en el bloc de notas con el nombre lotes y coloque dentro de la carpeta donde hay todo su archivo de script
for %%G in (*.sql) do sqlcmd /S servername /d databasename -i"%%G"
pause
EJEMPLO
para %% g in (*.sql) do sqlcmd /s NFGDDD23432 /d EmpyLeedB -i "%% g" pausa
En algún momento, si el inicio de sesión falló para usted, use el siguiente código con nombre de usuario y clave
for %%G in (*.sql) do sqlcmd /S SERVERNAME /d DBNAME -U USERNAME -P PASSWORD -i"%%G"
pause
para %% g in (*.sql) do sqlcmd /s NE8148SERVER /d EmpyLeedB -U Escocés -PAGS Tigre -i "%% g" pausa
Después de crear el archivo BAT dentro de la carpeta en la que están allí los archivos de su script.
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
- Ejecutar un directorio de archivos de script
- SQL Script Out Pon Mensajes durante la ejecución
- Script aprobado o fallido que son de color verde y rojo (amarillo para correr)
- Opción de error de parada
- Abrir el script en la opción de error
- Ejecutar el informe con el tiempo tomado para cada script
- Tiempo de duración total
- Probar la conexión DB
- Asíncrono
- .NET 4 y probado con SQL 2008
- Archivo exe único
- Mata la conexión en cualquier momento
Lo que sé que puede usar los comandos OSQL o SQLCMD para ejecutar múltiples archivos SQL. El inconveniente es que tendrá que crear un script para ambos comandos.
Uso de SQLCMD para ejecutar múltiples scripts de SQL Server
OSQL (esto es para SQL Server 2000)
http://msdn.microsoft.com/en-us/library/aa213087(v=sql.80).aspx
@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 de arriba copian en Note Pad, guárdelo como murciélago.
Paso 2: en la carpeta ABC de la unidad D en todos los archivos SQL en consultas ejecutadas en SQL Server.
Paso 3: Dale a su IP, ID de usuario y contraseña.
Puede crear un solo script que llame a todos los demás.
Pon lo siguiente en un archivo por lotes:
@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"
Cuando ejecuta ese archivo por lotes, creará un nuevo script llamado all.sql
en el mismo directorio donde se encuentra el archivo por lotes. Buscará todos los archivos con la extensión .sql
en el mismo directorio donde se encuentra el archivo por lotes.
Luego puede ejecutar todos los scripts usando sqlplus user/pwd @all.sql
(o extienda el archivo por lotes para llamar sqlplus
Después de crear el all.sql
guion)
Para ejecutar cada sqlfile 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 "@".
Después de la all.sql
se crea simplemente ejecutar all.sql
Con SQLPLUS, esto ejecutará cada archivo SQL en el all.sql
.
Si puede usar SQL interactivo:
1 - Cree 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 el PWD y el nombre de servidor.
3 - Coloque el archivo .bat en la carpeta que contiene archivos .sql y ejecútelo.