MSSQL: ¿Cómo la escritura de procedimientos almacenados creación con código?
-
21-08-2019 - |
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)?
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.