una txt tabla registros otra importar exportar ejemplos datos copiar con sql-server diagram

sql-server - registros - exportar tabla sql server a txt



¿Cómo exportar un diagrama de base de datos de SQL Server 2008 a otra base de datos? (6)

Uso la útil herramienta de Diagrama de base de datos en SQL Server 2008 para crear y administrar relaciones. He exportado sourceDB a destinationDB, pero el diagrama no aparece.

Estoy buscando intentando averiguar cómo exportar el diagrama que tengo en una base de datos a otra ... Este artículo de KB en línea falla porque select * from dtproperties ya no existe.


@Ash estaba teniendo el mismo problema. Esto es lo que hicimos para solucionarlo ...

Parece que los diagramas del sistema se almacenan dentro de la tabla "sysdiagrams". Entonces, lo primero que debe hacer es determinar el diagrama_id del Diagrama que desea copiar. Ejecute la siguiente consulta para enumerarlos todos. ** Tenga en cuenta que debe reemplazar "SourceDB" con el nombre de su base de datos.

-- List all database diagrams SELECT * FROM [SourceDB].[dbo].sysdiagrams

Luego puede usar INSERT para duplicar el diagrama de una base de datos a otra de la siguiente manera. ** Nota nuevamente, reemplace "SourceDB" con el nombre de la base de datos que contiene el diagrama existente y "DestinationDB" con el nombre de la base de datos en la que desea copiar. También @SourceDiagramId se debe establecer en el ID recuperado anteriormente.

-- Insert a particular database diagram DECLARE @SourceDiagramId int = 1 INSERT INTO [DestinationDB].[dbo].sysdiagrams SELECT [name],diagram_id , version,definition from [SourceDB].[dbo].sysdiagrams WHERE diagram_id = @SourceDiagramId

Entonces necesitas configurar el "principal_id" a 1 manualmente.

-- Update the principal id (no idea why, but it set the owner as some asp_net user UPDATE [DestinationDB].[dbo].sysdiagrams SET principal_id = 1

Esto funcionó para nosotros, parece bastante raro, ya que el diagrama se almacena por completo en una sola "definición" de campo binario.

La respuesta viene de:
http://www.dotnetspider.com/resources/21180-Copy-or-move-database-digram-from-for.aspx


Como en la respuesta de C Isaze , hay tres pasos simples:

1- Cree el mismo número de diagramas "ficticios" en el servidor de destino donde desea copiar los diagramas

2- Agregar el servidor de destino como servidor vinculado en el servidor de origen

3- ejecutar esta secuencia de comandos en el servidor de origen

update [LINKEDSERVER].TARGETDB.[dbo].sysdiagrams set [definition]= (SELECT [definition] from SOURCEDB.[dbo].sysdiagrams WHERE diagram_id = 1) where diagram_id=1


Esto genera una cadena de importación :

SELECT ''DECLARE @def AS VARBINARY(MAX) ; '' + ''SELECT @def = CONVERT(VARBINARY(MAX), 0x'' + CONVERT(NVARCHAR(MAX), [definition], 2) + '', 2) ;'' + '' EXEC dbo.sp_creatediagram'' + '' @diagramname='''''' + [name] + '''''','' + '' @version='' + CAST([version] AS NVARCHAR(MAX)) + '','' + '' @definition=@def'' AS ExportQuery FROM [dbo].[sysdiagrams] WHERE [name] = '''' -- Diagram Name

A continuación, ejecuta la cadena generada en otro DB.

Como PROCEDIMIENTO :

-- ============================================= -- Author: Eduardo Cuomo -- Description: Export Database Diagrama to SQL Query -- ============================================= CREATE PROCEDURE [dbo].[Sys_ExportDatabaseDiagram] @name SYSNAME -- Diagram Name AS -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; SELECT ''DECLARE @def AS VARBINARY(MAX) ; '' + ''SELECT @def = CONVERT(VARBINARY(MAX), 0x'' + CONVERT(NVARCHAR(MAX), [definition], 2) + '', 2) ; '' + '' EXEC dbo.sp_creatediagram'' + '' @diagramname='''''''''' + [name] + '''''''''','' + '' @version='' + CAST([version] AS NVARCHAR(MAX)) + '','' + '' @definition=@def'' AS ExportQuery FROM [dbo].[sysdiagrams] WHERE [name] = @name


Hay una herramienta para exportar los diagramas a un archivo y volver a una base de datos que puede encontrar aquí: https://github.com/timabell/database-diagram-scm/

Podrías usar esto apuntando a tu base de datos original y haciendo una exportación, y luego apuntando a tu base de datos de destino y haciendo una importación.


Puede deshacerse de la declaración UPDATE arreglando su declaración INSERT , específicamente la parte seleccionada. Está insertando la columna diagram_id en la columna principal_id (diagram_id es una identidad).

Cambiarlo a:

DECLARE @SourceDiagramId int = 1 INSERT INTO [DestinationDB].[dbo].sysdiagrams SELECT [name],principal_id,version,definition from [SourceDB].[dbo].sysdiagrams WHERE diagram_id = @SourceDiagramId

Y listo, todo está allí bien la primera vez.


Si las bases de datos están en servidores diferentes, puede haber problemas de permisos.

Para copiar los sysdiagrams, cree la misma cantidad de diagramas "ficticios" en el servidor de destino donde desea copiar los diagramas, agregue el servidor de destino como un servidor vinculado en el servidor de origen y luego ejecute el script:

SELECT * from [LINKEDSERVER].TARGETDB.[dbo].sysdiagrams SELECT * from SOURCEDB.[dbo].sysdiagrams update [LINKEDSERVER].TARGETDB.[dbo].sysdiagrams set definition= (SELECT definition from SOURCEDB.[dbo].sysdiagrams WHERE diagram_id = 1) where diagram_id=1 -- the first 2 select commands will confirm that you are able to connect to both databases -- then change the id as required to copy all the diagrams