Pregunta

Estoy tratando de consultar una lista de definiciones de procedimientos almacenados utilizando INFORMATION_SCHEMA.ROUTINES que existen en una base de datos pero no en otro.

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


Esto me da las definiciones de consulta en una sola línea así que cuando tengo un comentario como este

--Some comment
SELECT Column
FROM Somewhere

El SQL se comenta fuera y no puedo usar la definición para crear el SP.

Como me analizar esta de vuelta con los saltos de línea adecuados?
o
¿Hay una mejor manera de conseguir estos scripts (utilizando el código)?

¿Fue útil?

Solución

El procedimiento almacenado sólo se muestra en una línea en Management Studio. Si se ejecuta la consulta con resultados a texto, o utilice la siguiente, obtendrá la línea correcta rompe:

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

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

print @sql

Otros consejos

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

Así es como he implementado la solución de ck ...

la vista INFORMATION_SCHEMA sólo devuelve los primeros 4000 caracteres en la definición. (Lo ideal es que no tengas SP que son tanto tiempo) que le conviene a la escritura manual o los de alguna otra manera.

Creo que la forma más fácil de conseguir sus procedimientos almacenados es utilizar la utilidad de importación / exportación que se construye en SQL Server Management Studio. Desde allí se puede exportar los objetos de procedimiento almacenado en la ventana de código o en un archivo que se puede ejecutar inmediatamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top