Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

wie gespeicherte SQL-Prozeduren per Batch in .sql-Dateien gespeichert werden

Batch-Datei mit Skript erstellen (Entschuldigung für die Formatierung, aber es sollte wirklich inline sein, um Batch auszuführen):

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"

Nennen Sie es "run.bat". Verwenden Sie nun zur Batch-Ausführung folgende Parameter:
run.bat [Benutzername] [Passwort] [Servername] [Datenbank]
Beispiel:
run.bat sa pwd111 localhost\SQLEXPRESS master
Zuerst werden alle gespeicherten Prozedurnamen in der Datei sp_list.txt gespeichert, dann nacheinander in separaten Skriptdateien. Das einzige Problem - letzte Zeile jedes Skripts mit Ergebniszählung - ich arbeite daran :)

bearbeitet :Fehler in Abfrage behoben

Entfernen der Zeile „Betroffene Zeilen“
Ok, jetzt müssen wir einen weiteren Stapel erstellen:

type %1 | findstr /V /i %2  > xxxtmpfile 
copy xxxtmpfile %1 /y /v
del xxxtmpfile

Nennen Sie es "line_del.bat". Sehen Sie, der erste Parameter ist die zu verarbeitende Datei, der zweite - eine Zeichenfolge, in der Zeilen zum Entfernen gesucht werden. Ändern Sie nun den Hauptstapel (nochmals Entschuldigung für die Formatierung):

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"

Siehe verwandte Artikel:
Einfache Programmierbefehle in einer Batch-Umgebung
osql-Dienstprogramm
MSSQL :Wie erstellen Sie mit Code ein Skript für gespeicherte Prozeduren?
Löschen Sie bestimmte Zeilen in einer txt-Datei über eine Batch-Datei

:) Wie Sie vielleicht bemerkt haben, sind die letzten beiden von SO!