J'ai un certain nombre de fichiers .sql que je dois exécuter pour appliquer les modifications apportées par d'autres développeurs sur une base de données SQL Server 2005 . Les fichiers sont nommés selon le modèle suivant:
0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...
Existe-t-il un moyen de les exécuter tous en une fois?
Créez un fichier .bat avec la commande suivante:
for %%G in (*.sql) do sqlcmd /S servername /d databaseName -E -i"%%G"
pause
Placez ce fichier .bat dans le répertoire à partir duquel vous voulez exécuter les fichiers .sQL, double-cliquez sur le fichier .bat et vous avez terminé!
Utilisez POUR . A partir de l'invite de commande:
c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
Dans SQL Management Studio, ouvrez une nouvelle requête et tapez tous les fichiers comme ci-dessous.
:r c:\Scripts\script1.sql
:r c:\Scripts\script2.sql
:r c:\Scripts\script3.sql
Cliquez sur Mode SQLCMD. les fichiers seront sélectionnés en gris comme ci-dessous
:r c:\Scripts\script1.sql
:r c:\Scripts\script2.sql
:r c:\Scripts\script3.sql
Assurez-vous que SQLCMD est activé en cliquant sur l’option Query> SQLCMD dans le studio de gestion.
Supposons que vous ayez quatre fichiers .sql (script1.sql,script2.sql,script3.sql,script4.sql
) dans un dossier c:\scripts
.
Créez un fichier de script principal (Main.sql) avec les éléments suivants:
:r c:\Scripts\script1.sql
:r c:\Scripts\script2.sql
:r c:\Scripts\script3.sql
:r c:\Scripts\script4.sql
Enregistrez le fichier Main.sql dans c:\scripts.
Créez un fichier de commandes nommé ExecuteScripts.bat
avec les éléments suivants:
SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
PAUSE
N'oubliez pas de remplacer <YourDatabaseName>
par la base de données sur laquelle vous souhaitez exécuter vos scripts. Par exemple, si la base de données est "Employé", la commande serait la suivante:
SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
PAUSE
Exécutez le fichier de commandes en double-cliquant dessus.
Vous pouvez utiliser ApexSQL Propagate . C'est un outil gratuit qui exécute plusieurs scripts sur plusieurs bases de données. Vous pouvez sélectionner autant de scripts que nécessaire et les exécuter sur une ou plusieurs bases de données (même sur plusieurs serveurs). Vous pouvez créer et sauvegarder une liste de scripts, puis sélectionner cette liste chaque fois que vous souhaitez exécuter ces mêmes scripts dans l'ordre créé (vous pouvez également ajouter plusieurs listes de scripts):
Lorsque les scripts et les bases de données sont sélectionnés, ils apparaissent dans la fenêtre principale. Il vous suffit de cliquer sur le bouton "Exécuter" pour exécuter tous les scripts sur les bases de données sélectionnées dans l'ordre indiqué:
Requête générale
enregistrer les lignes ci-dessous dans le bloc-notes avec le nom batch.bat et les placer dans le dossier où se trouvent tous vos fichiers de script
for %%G in (*.sql) do sqlcmd /S servername /d databasename -i"%%G"
pause
EXEMPLE
pour %% G dans (* .sql), exécutez sqlcmd/S NFGDDD23432 / dEMPLYEEDB-i "%% G" pause.
si jamais la connexion échoue, veuillez utiliser le code ci-dessous avec nom d'utilisateur et mot de passe
for %%G in (*.sql) do sqlcmd /S SERVERNAME /d DBNAME -U USERNAME -P PASSWORD -i"%%G"
pause
pour %% G dans (* .sql), exécutez sqlcmd/S NE8148server / dEMPLYEEDB-U Scott -P tigre -i "%% G"pause
Après avoir créé le fichier bat dans le dossier contenant vos fichiers de script, il vous suffit de cliquer sur le fichier de batte pour exécuter vos scripts.
J'ai écrit un utilitaire open source en C # qui vous permet de faire glisser de nombreux fichiers SQL et de les exécuter sur une base de données.
L'utilitaire présente les caractéristiques suivantes:
Ce que je sais, vous pouvez utiliser les commandes osql ou sqlcmd pour exécuter plusieurs fichiers SQL. L'inconvénient est que vous devrez créer un script pour les deux commandes.
Utilisation de SQLCMD pour exécuter plusieurs scripts SQL Server
OSQL (pour SQL Server 2000)
http://msdn.Microsoft.com/en-us/library/aa213087(v=SQL.80).aspx
Si vous pouvez utiliser Interactive SQL:
1 - Créez un fichier .bat avec ce code:
@ECHO OFF ECHO
for %%G in (*.sql) do dbisql -c "uid=dba;pwd=XXXXXXXX;ServerName=INSERT-DB-NAME-HERE" %%G
pause
2 - Modifiez le pwd et ServerName.
3 - Placez le fichier .BAT dans le dossier contenant les fichiers .SQL et exécutez-le.
@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
)
Étape 1: les lignes ci-dessus sont copiées dans le bloc-notes et sauvegardées sous forme de batte.
step2: Dans le dossier d lecteur abc dans tous les fichiers SQL dans les requêtes exécutées dans le serveur SQL.
step3: Indiquez votre adresse IP, votre identifiant et votre mot de passe.
Pour exécuter chaque fichier SQL sur le même répertoire, utilisez la commande suivante:
ls | awk '{print "@"$0}' > all.sql
Cette commande créera un fichier SQL unique avec les noms de chaque fichier SQL du répertoire ajouté par "@".
Après que le all.sql
soit créé, exécutez simplement all.sql
avec SQLPlus, cela exécutera chaque fichier SQL dans le all.sql
.
Vous pouvez créer un seul script qui appelle tous les autres.
Mettez ce qui suit dans un fichier de commandes:
@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"
Lorsque vous exécutez ce fichier de commandes, il crée un nouveau script nommé all.sql
dans le même répertoire que celui où se trouve le fichier de commandes. Il recherchera tous les fichiers avec l'extension .sql
dans le même répertoire que le fichier de traitement par lots.
Vous pouvez ensuite exécuter tous les scripts à l'aide de sqlplus user/pwd @all.sql
(ou étendre le fichier de commandes pour appeler sqlplus
après avoir créé le script all.sql
).