Създайте партиден файл със скрипт (съжалявам за форматирането, но наистина трябва да е вграден, за да изпълни пакет):
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". Вижте, първият параметър е файл за обработка, 2-ри - низ за търсене на редове за премахване. Сега променете основния пакет (отново, съжалявам за форматирането):
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 :Как скриптирате създаването на съхранена процедура с код?
Изтриване на определени редове в txt файл чрез пакетен файл
:) може да забележите, последните две са от SO!