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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top