Создать пакетный файл со скриптом (извините за форматирование, но он действительно должен быть встроенным, чтобы выполнить пакет):
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"
Назовите его "run.bat". Теперь, чтобы выполнить партию, используйте параметры:
run.bat [имя пользователя] [пароль] [имя_сервера] [база данных]
на примере:
run.bat sa pwd111 localhost \ SQLEXPRESS master
сначала все имена хранимых процедур будут храниться в файле sp_list.txt, затем одно за другим в отдельных файлах сценариев. Единственная проблема - последняя строка каждого скрипта с подсчетом результатов - я работаю над этим :)
отредактировано : исправлена ошибка в запросе
Удаление строки "Затронутые строки"
Хорошо, теперь нам нужно создать еще одну партию:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
Назовите его "line_del.bat". Смотрите, первый параметр - это файл для обработки, второй - строка для поиска строк для удаления. Теперь измените основной пакет (опять же извините за форматирование):
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"
См. Статьи по теме:
Простые команды программирования в пакетной среде
Утилита osql
MSSQL: Как выполнить сценарий создания хранимой процедуры с помощью кода?
Удалить определенные строки в текстовом файле через командный файл
:) вы можете заметить, последние два из SO!