Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

jak zapisać procedury składowane SQL w plikach .sql za pośrednictwem partii?

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!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę wywołać procedurę składowaną SQL przy użyciu EntityFramework 7 i Asp.Net 5?

  2. Ustawienie limitu czasu dla SQL Server

  3. Funkcja agregująca w zapytaniu aktualizującym SQL?

  4. Skrypt tsql do znajdowania tabel, które nie są używane przez procedury składowane, widoki, funkcje itp.?

  5. SQL — przestaw wiele kolumn bez agregatów