2010-07-22 21 views
14

¿Hay alguna forma de copiar un Diagrama de base de datos de SQL Server en otro servidor?SQL Server 2005, cómo copiar un Diagrama de base de datos a otro servidor

He encontrado this y modificar lo vistoso para copiar sólo un diagrama:

INSERT INTO dbB.dbo.sysdiagrams 
SELECT [name],[principal_id],[version],[definition] 
FROM dbA.dbo.sysdiagrams 
Where name = 'MyDiagramName' 

pero tengo que copiarlo a otro servidor (Desarrollo de la Producción).

No quiero crear un servidor vinculado para hacer esto. (Explicación actualizada) La razón detrás de eso es que quiero incluir el diagrama en un script de actualización. Realicé cambios en la base de datos para admitir una nueva versión (nuevas tablas, etc.) y deseo que el diagrama sea parte del script de actualización. así que es mejor si pudiera poner eso en una secuencia de comandos SQL. Si obtuve un archivo separado para importarlo manualmente posteriormente, podría hacer el trabajo, pero no es el mejor.

Por lo tanto, debo 'guardar' la definición del diagrama en un archivo de alguna manera para restaurarlo en el otro servidor.

Respuesta

5

Sólo encontró this solution.

En este artículo, existe el código para crear el Procedimiento almacenado que genera una secuencia de comandos de SQL Server para recrear los diagramas. Así que solo guarda el resultado del Procedimiento almacenado en un archivo .SQL y lo ejecuta en el otro servidor.

El problema es convertir Varbinary a una cadena (Varchar) en hexadecimal para poder usarlo en una consulta de inserción/actualización. Pero está bien explicado en el enlace ...

2

Primero: Crear un servidor de enlace Desde Source Server dentro de Destination Server.

Para crear Link Server uso this Link

Segundo: Usar este

USE DestinationDatabase 

DELETE sysDiagrams 
WHERE name IN (SELECT name 
       FROM  <LinkServerName>.SourceDatabase.dbo.sysDiagrams) 

SET IDENTITY_INSERT sysDiagrams ON 

INSERT sysDiagrams 
    (name , 
     principal_id , 
     diagram_id , 
     version , 
     definition 
    ) 
    SELECT name , 
      principal_id , 
      diagram_id , 
      version , 
      definition 
    FROM <LinkServerName>.SourceDatabase.dbo.sysDiagrams 

SET IDENTITY_INSERT sysDiagrams OFF 
+0

Especifiqué en la pregunta que no quiero usar un servidor de enlaces porque el diagrama debe incluirse en un script de actualización. Gracias de cualquier manera. – DavRob60

+0

usa Open DataSource contra el servidor de enlace. –

+1

Simplemente no lo entiendo. ¿Qué sucede si el servidor de destino no "ve" el servidor de origen? – DavRob60

Cuestiones relacionadas