Créez un fichier de commandes avec un script (désolé pour le formatage, mais il devrait vraiment être en ligne pour exécuter le lot) :
osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_TYPE = 'PROCEDURE'" -n -o "sp_list.txt"
for /f %%a in (sp_list.txt) do osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_NAME = '%%a'" -n -o "%%a.sql"
Nommez-le "run.bat". Maintenant, pour exécuter le batch, utilisez params :
run.bat [username] [password] [servername] [database]
sur exemple :
run.bat sa pwd111 localhost\SQLEXPRESS master
Tout d'abord, tous les noms de procédures stockées seront stockés dans le fichier sp_list.txt, puis un par un dans des fichiers de script séparés. Le seul problème - la dernière ligne de chaque script avec le nombre de résultats - j'y travaille :)
modifié :bug dans la requête corrigé
Suppression de la ligne "Lignes affectées"
Ok, nous devons maintenant créer un lot supplémentaire :
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
Nommez-le "line_del.bat". Voir, le premier paramètre est le fichier à traiter, le 2ème - la chaîne pour rechercher les lignes à supprimer. Modifiez maintenant le lot principal (encore une fois, désolé pour le formatage) :
osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_TYPE = 'PROCEDURE'" -n -o "sp_list.txt"
call line_del sp_list.txt "rows affected"
call line_del sp_list.txt "row affected"
for /f %%a in (sp_list.txt) do osql -U %1 -P %2 -S %3 -d %4 -h-1 -Q "SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.Routines WHERE ROUTINE_NAME = '%%a'" -n -o "%%a.sql"
for /f %%a in (sp_list.txt) do call line_del %%a.sql "rows affected"
for /f %%a in (sp_list.txt) do call line_del %%a.sql "row affected"
Voir les articles associés :
Commandes de programmation simples dans un environnement batch
Utilitaire osql
MSSQL : Comment scriptez-vous la création d'une procédure stockée avec du code ?
Supprimer certaines lignes d'un fichier txt via un fichier batch
:) vous remarquerez peut-être que les deux derniers sont de SO !