MSSQL: Wie Skript Sie gespeicherte Prozedur-Erstellung mit Code?
-
21-08-2019 - |
Frage
ich für eine Liste von Definitionen gespeicherter Prozeduren mit INFORMATION_SCHEMA.ROUTINES abzufragen versuchen, das in einer Datenbank vorhanden ist, aber nicht in einem anderen.
SELECT
t1.Routine_Definition
FROM
[server1].MyDatabase.INFORMATION_SCHEMA.Routines t1
LEFT JOIN
[server2].MyDatabase.INFORMATION_SCHEMA.Routines t2 ON t1.Routine_Name = t2.Routine_Name
WHERE
t2.Routine_Name is null
Das gibt mir die Query-Definitionen in einer einzigen Zeile so, wenn ich einen Kommentar wie diese
--Some comment
SELECT Column
FROM Somewhere
Die SQL wird kommentiert und ich kann nicht die Definition verwenden, um die SP zu erstellen.
Wie ich analysieren diese mit den richtigen Zeilenumbrüche zurück?
oder
Gibt es einen besseren Weg, um diese Skripte (mit Code) zu bekommen?
Lösung
Die gespeicherte Prozedur wird nur auf einer Linie in Management Studio angezeigt. Wenn Sie die Abfrage mit Ergebnissen zu Text führen, oder verwenden Sie die folgende, erhalten Sie die richtigen Zeilenumbrüche:
declare @sql varchar(8000) -- varchar(max) in SQL 2005+
SELECT
@sql = t1.Routine_Definition
FROM
INFORMATION_SCHEMA.Routines t1
print @sql
Andere Tipps
DECLARE MY_CURSOR Cursor
FOR
SELECT
t1.Routine_Definition
FROM
[server1].MyDatabase.INFORMATION_SCHEMA.Routines t1
LEFT JOIN
[server2].MyDatabase.INFORMATION_SCHEMA.Routines t2 ON t1.Routine_Name = t2.Routine_Name
WHERE
t2.Routine_Name is null AND
LEN(t1.Routine_Definition) < 4000
Open My_Cursor
DECLARE @sql VARCHAR(MAX)
FETCH NEXT FROM MY_Cursor INTO @sql
While (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
Print @sql
FETCH NEXT FROM MY_CURSOR INTO @sql
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
GO
Hier ist, wie ich ck-Lösung implementiert ...
die INFORMATION_SCHEMA Ansicht gibt nur die ersten 4000 Zeichen in der Definition. (Im Idealfall wird nicht Sie SP haben, die so lange) Sie Skript manuell diejenigen wollen oder auf andere Weise.
Ich denke, der einfachste Weg, Ihre gespeicherten Prozeduren des Erhaltens ist das Import / Export-Dienstprogramm zu verwenden, die in SQL Server Management Studio integriert ist. Von dort können Sie Ihre gespeicherte Prozedur Objekte in das Codefenster oder in eine Datei exportieren, die Sie sofort ausgeführt werden können.