Saltar al contenido

SQL Server: copie los procedimientos almacenados de una base de datos a otra

Hemos buscado en diferentes foros y así de este modo regalarte la respuesta a tu problema, en caso de alguna difcultad déjanos la inquietud y te contestamos sin falta.

Solución:

  • Haga clic derecho en la base de datos
  • Tareas
  • Generar guiones
  • Seleccione los objetos que desea secuenciar
  • Guión a archivo
  • Ejecutar scripts generados contra la base de datos de destino

Este código copia todos los procedimientos almacenados en la base de datos maestra a la base de datos de destino, puede copiar solo los procedimientos que desee filtrando la consulta por el nombre del procedimiento.

@sql se define como nvarchar(max), @Name es la base de datos de destino

DECLARE c CURSOR FOR 
   SELECT Definition
   FROM [ResiDazeMaster].[sys].[procedures] p
   INNER JOIN [ResiDazeMaster].sys.sql_modules m ON p.object_id = m.object_id

OPEN c

FETCH NEXT FROM c INTO @sql

WHILE @@FETCH_STATUS = 0 
BEGIN
   SET @sql = REPLACE(@sql,'''','''''')
   SET @sql = 'USE [' + @Name + ']; EXEC(''' + @sql + ''')'

   EXEC(@sql)

   FETCH NEXT FROM c INTO @sql
END             

CLOSE c
DEALLOCATE c

Uno tardío pero da más detalles que podrían ser útiles…

Aquí hay una lista de cosas que puede hacer con ventajas y desventajas

Generar scripts usando SSMS

  • Ventajas: extremadamente fácil de usar y compatible de forma predeterminada
  • Contras: los scripts pueden no estar en el orden de ejecución correcto y es posible que obtenga errores si el procedimiento almacenado ya existe en la base de datos secundaria. Asegúrese de revisar el script antes de ejecutarlo.

Herramientas de terceros

  • Ventajas: herramientas como ApexSQL Diff (esto es lo que uso yo, pero hay muchas otras como herramientas de Red Gate o Dev Art) compararán dos bases de datos con un solo clic y generarán un script que puede ejecutar de inmediato
  • Contras: estos no son gratuitos (aunque la mayoría de los proveedores tienen una versión de prueba completamente funcional)

Vistas del sistema

  • Ventajas: Puede ver fácilmente qué procedimientos almacenados existen en el servidor secundario y solo generar aquellos que no tiene.
  • Contras: Requiere un poco más de conocimiento de SQL

Aquí se explica cómo obtener una lista de todos los procedimientos en alguna base de datos que no existen en otra base de datos

select *
from DB1.sys.procedures P
where P.name not in 
 (select name from DB2.sys.procedures P2)

Tienes la posibilidad dar visibilidad a esta crónica si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *