Utwórz plik wsadowy ze skryptem (przepraszam za formatowanie, ale wykonanie wsadowe powinno być wbudowane):
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"
Nazwij go "run.bat". Teraz, aby wykonać zadanie wsadowe, użyj parametrów:
run.bat [nazwa użytkownika] [hasło] [nazwa serwera] [baza danych]
na przykład:
run.bat sa pwd111 localhost\SQLEXPRESS master
Najpierw wszystkie nazwy procedur składowanych będą przechowywane w pliku sp_list.txt, a następnie kolejno w osobnych plikach skryptów. Jedyny problem - ostatnia linia każdego skryptu z liczbą wyników - pracuję nad tym :)
edytowany :naprawiono błąd w zapytaniu
Usuwanie wiersza „Wiersze, których dotyczy problem”
OK, teraz musimy utworzyć jeszcze jedną partię:
type %1 | findstr /V /i %2 > xxxtmpfile
copy xxxtmpfile %1 /y /v
del xxxtmpfile
Nazwij go "line_del.bat". Widzisz, pierwszy parametr to plik do przetworzenia, drugi - ciąg do wyszukiwania wierszy do usunięcia. Teraz zmodyfikuj główną partię (ponownie przepraszam za formatowanie):
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"
Zobacz powiązane artykuły:
Proste polecenia programowania w środowisku wsadowym
Narzędzie osql
MSSQL :Jak oskryptować tworzenie procedury składowanej za pomocą kodu?
Usuń określone wiersze w pliku txt za pomocą pliku wsadowego
:) możesz zauważyć, ostatnie dwa są od SO!