Domanda

Sto cercando di query per un elenco di definizioni di stored procedure utilizzando information_schema.routines che esistono in un database, ma non in un altro.

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


Questo mi dà le definizioni di query in una sola riga in modo che quando ho un commento come questo

--Some comment
SELECT Column
FROM Somewhere

L'SQL viene commentata e non posso usare la definizione per creare la SP.

Come il parsing questo ritorno con le dovute interruzioni di linea?
o
C'è un modo migliore per ottenere questi script (utilizzando il codice)?

È stato utile?

Soluzione

La stored procedure viene visualizzato solo su una riga in Management Studio. Se si esegue la query con i risultati al testo, o utilizzare la seguente, si otterrà la linea corretta rompe:

declare @sql varchar(8000) -- varchar(max) in SQL 2005+

SELECT 
        @sql = t1.Routine_Definition
FROM
        INFORMATION_SCHEMA.Routines t1 

print @sql

Altri suggerimenti

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

Ecco come ho implementato la soluzione di ck ...

la vista INFORMATION_SCHEMA restituisce solo i primi 4000 caratteri nella definizione. (Idealmente non dovrete SP che sono così a lungo) Si vuole lo script coloro manualmente o in qualche altro modo.

Credo che il modo più semplice di ottenere i vostri stored procedure è quello di utilizzare l'utilità di importazione / esportazione che è costruito in SQL Server Management Studio. Da lì è possibile esportare i vostri oggetti stored procedure nella finestra del codice o in un file che è possibile eseguire immediatamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top