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

8

Ich möchte meine MS SQL Server 2005 gespeicherten Prozeduren automatisch in .sql-Dateien speichern (würde ein Tool bevorzugen, das ich über .bat aufrufen kann), also muss ich nicht jeden einzelnen Sproc manuell klicken und speichern.

>

Ich habe bereits SMOscript von devio IT gefunden, aber es sammelt alle Tabellen und sproc, die einige Zeit brauchen. Gibt es ein ähnliches Tool, mit dem ich festlegen kann, welche Sproc (s) exportiert werden sollen? Auch fehlt mir die USE-Klausel, die SMOScript im Gegensatz zum manuellen Export als Script-Sproc für CREATE nicht zur exportierten Datei hinzufügt.

Beste Grüße Sean

    
seansilver 20.02.2009, 08:34
quelle

7 Antworten

5

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

%Vor%

Nennen Sie es "run.bat". Jetzt, um Batch-Verwendung Params ausführen:
run.bat [Benutzername] [Passwort] [Servername] [Datenbank]
am 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ähler - Ich arbeite daran :)

bearbeitet : Fehler in der Abfrage behoben

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

%Vor%

Nennen Sie es "line_del.bat". Siehe, der erste Parameter ist die zu verarbeitende Datei, 2. - Zeichenfolge, um die Zeilen zum Entfernen zu suchen. Ändere nun den Hauptbatch (nochmal, sorry über die Formatierung):

%Vor%

Siehe verwandte Artikel:
Einfache Programmierbefehle in einer Batch-Umgebung
osql-Dienstprogramm
MSSQL: Wie schreiben Sie die Stored Procedure-Erstellung mit Code?
Löschen bestimmter Zeilen in einer TXT-Datei über eine Batch-Datei

:) Sie werden vielleicht bemerken, die letzten zwei sind von SO!

    
Max Gontar 20.02.2009, 16:04
quelle
2

Es gibt eine Alternative in SQL Server Management Studio, indem Sie die Datenbank scripten ...

Erweitern Sie die Objekt-Explorer-Ansicht, um die Datenbank zu finden, klicken Sie mit der rechten Maustaste und wählen Sie "Aufgaben: Skripte generieren"

Von dort aus können Sie alle Objekte, nur gespeicherte Voreinstellungen, von irgendetwas dazwischen scripten. Es gibt eine ganze Reihe von Optionen auf einer Seite, aber die wichtigste, die ich ändere, ist: - "Include IF NOT EXISTS"

Wenn Sie diese Option auf "FALSE" setzen, erhalten Sie nur eine ganze Liste von CREATE-Anweisungen.

Sie können dann die Objekte in ein neues Abfragefenster oder eine Datei scripten.

    
MatBailie 20.02.2009 08:56
quelle
1

Das Hinzufügen von SET NOCOUNT ON hat zwar die Notwendigkeit für line_del.bat beseitigt, aber das Ersetzen von syscomments mit sys.sql_modules führte dazu, dass jede gespeicherte Prozedur auf 258 Zeichen gekürzt wurde. Also für die besten Ergebnisse war der Code, den ich verwendete:

%Vor%

Was funktioniert hat und die Verwendung von line_del.bat nicht benötigt. Was ich nicht bekommen habe, als ich den manuellen Export mit dem SSMS-Assistenten (Aufgaben / Skripte erstellen / Gespeicherte Prozeduren / Alles auswählen) durchgeführt habe, war das:

%Vor%

am Anfang jeder .sql und der nachfolgende GO-Befehl ebenfalls. Nicht unglaublich wichtig, aber etwas zu beachten. Danke an Max Gontar, Seansilver und Lee für eure Beiträge! Ich kann jetzt die Sicherung der gespeicherten Prozeduren in der Datenbank automatisieren und Versionskontrolle anwenden.

    
user874715 02.08.2011 13:38
quelle
0

Ich wollte vor einer kurzen Zeit dasselbe tun und habe damit ein kleines Vbscript gemacht.

Sehen Sie hier Quellcodeverwaltung und gespeicherte Prozeduren

    
Allan Simonsen 20.02.2009 09:00
quelle
0

Ich habe sqlcmd und -E anstelle von user verwendet, pass. Dies funktioniert bisher gut, nur gespeicherte Prozeduren länger als 4000 Zeichen werden einen Zeilenumbruch haben

%Vor%

Beste Grüße Sean

    
seansilver 24.02.2009 09:41
quelle
0

Ich habe SET NOCOUNT ON hinzugefügt, um die Notwendigkeit von line_del.bat zu eliminieren. Ersetzte auch syscomments mit sys.sql_modules (SQL 2005). Ich hätte auch die Funktion OBJECT_DEFINITION verwenden können, aber sie war langsamer als sys.sql_modules.

%Vor%     
Lee 07.05.2009 15:53
quelle
0

Danke an alle oben genannten für Hilfe und das hier für andere sqlcmd noobs wie mich zu finden. Funktioniert auf SQL Server 2005. Objektname ist eine Prozedur, Ansicht usw. Name.

%Vor%     
Gary Thomann 07.10.2011 05:31
quelle