137 votes

Exécuter tous les fichiers SQL dans un répertoire

Je dispose d'un certain nombre de fichiers .sql que je dois exécuter afin d'appliquer les modifications apportées par d'autres développeurs à 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
...

Y a-t-il un moyen de les exécuter tous en une seule fois ?

169voto

Vijeth Points 216

Créez un fichier .BAT avec la commande suivante :

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

Si vous devez fournir le nom d'utilisateur et le mot de passe

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

Notez que le "-E" n'est pas nécessaire lorsque l'utilisateur/mot de passe est fourni.

Placez ce fichier .BAT dans le répertoire à partir duquel vous souhaitez que les fichiers .SQL soient exécutés, double-cliquez sur le fichier .BAT et le tour est joué !

2 votes

Lorsque j'ai exécuté le fichier batch, un problème d'authentification s'est produit en disant "Login failed. La connexion provient d'un domaine non fiable et ne peut être utilisée avec l'authentification Windows". Existe-t-il un moyen de fournir le nom d'utilisateur et le mot de passe ainsi que le nom du serveur et la base de données ?

12 votes

@SanjayMaharjan utiliser -U pour l'utilisateur et -P pour le mot de passe, comme : for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P "password" -i"%%G"

1 votes

Comment puis-je mettre la sortie dans des fichiers séparés en utilisant -o ? chaque fois que j'utilise comme -o temp.txt, ce temp.txt est écrasé. je veux obtenir les fichiers de sortie avec le même nom de fichier sql.

74voto

Remus Rusanu Points 159382

Utilisez POUR . A partir de l'invite de commande :

c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"

2 votes

J'ai dû ajouter des guillemets autour du dernier "%f" pour que cela fonctionne avec les scripts qui contiennent des espaces.

0 votes

Pour une version qui fonctionne dans les fichiers batch, voir cette réponse .

0 votes

J'ai également dû ajouter d'autres paramètres (par exemple /I pour activer les identifiants cités).

24voto

Ashish Gupta Points 5229

Assurez-vous que SQLCMD est activé en cliquant sur l'option Requête > Mode SQLCMD dans le studio de gestion.

  1. Supposons que vous ayez quatre fichiers .sql ( script1.sql,script2.sql,script3.sql,script4.sql ) dans un dossier c:\scripts .

  2. Créez un fichier principal script (Main.sql) avec ce qui suit :

    :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 : \<strkeep>scripts<strkeep> lui-même.

  3. Créez un fichier batch nommé ExecuteScripts.bat avec les éléments suivants :

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

    N'oubliez pas de remplacer <YourDatabaseName> avec la base de données dans laquelle vous voulez exécuter vos scripts. Par exemple, si la base de données est "Employee", la commande serait la suivante :

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
    PAUSE
  4. Exécutez le fichier batch en double cliquant dessus.

0 votes

Je viens de modifier ma réponse. De plus, il faut s'assurer que les fichiers script existent dans le chemin spécifié.

1 votes

Le bon côté de cette approche est que si une erreur est trouvée, il faut arrêter l'exécution des autres scripts :) similaire à -b exemple : SQLCMD -b -i "file 1.sql","file 2.sql"

0 votes

L'inconvénient de cette approche est que l'on doit maintenir la liste de tous les fichiers SQL à exécuter.

5voto

Clinton Ward Points 1397

J'ai écrit un utilitaire open source en C# qui vous permet de glisser et déposer de nombreux fichiers SQL et de les exécuter contre une base de données.

L'utilitaire présente les caractéristiques suivantes :

  • Glisser et déposer des fichiers script.
  • Exécuter un répertoire de fichiers script.
  • Sql script messages de sortie en cours d'exécution
  • script réussi ou échoué qui sont colorés en vert et rouge (jaune pour l'exécution).
  • Option d'arrêt sur erreur
  • Ouvrir le script sur l'option d'erreur
  • Exécuter un rapport avec le temps pris pour chaque script.
  • Durée totale
  • Tester la connexion à la base de données
  • Asynchronus
  • .Net 4 et testé avec SQL 2008
  • Fichier exe unique
  • Coupez la connexion à tout moment

3voto

Aseem Gautam Points 7269

De 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 de SQL Server

OSQL (C'est pour sql server 2000)

http://msdn.microsoft.com/en-us/library/aa213087(v=SQL.80).aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X