Подтвердить что ты не робот

Как экспортировать диаграмму базы данных SQL Server 2008 в другую БД?

Я использую удобный инструмент Diagramming базы данных в SQL Server 2008 для создания и управления отношениями. Я экспортировал sourceDB в destinationDB, но диаграмма не встречается.

Я смотрю вокруг, пытаясь выяснить, как экспортировать только диаграмму, которую я имею в одной базе данных, другой... Эта статья в Интернете в Интернете терпит неудачу, поскольку select * from dtproperties больше не существует.

4b9b3361

Ответ 1

@Ash У меня была такая же проблема. Вот что мы сделали, чтобы обойти это...

Кажется, что системные диаграммы хранятся в таблице "sysdiagrams". Итак, первое, что вам нужно сделать, это определить диаграмму диаграммы, которую вы хотите скопировать. Выполните следующий запрос, чтобы перечислить их все. ** Обратите внимание, что вам нужно заменить "SourceDB" на имя вашей базы данных.

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

Затем вы можете использовать INSERT для дублирования диаграммы из одной базы данных в другую следующим образом. ** Примечание снова замените "SourceDB" на имя базы данных, содержащей существующую диаграмму, и "DestinationDB" с именем базы данных, которую вы хотите скопировать. Также @SourceDiagramId должен быть установлен на идентификатор, полученный выше.

-- 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

Затем вам нужно вручную установить "main_id" на 1.

-- 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

Это сработало для нас, кажется, довольно хаки, особенно потому, что диаграмма полностью хранится в одном "определении" двоичного поля.

Ответ приходит от:
http://www.dotnetspider.com/resources/21180-Copy-or-move-database-digram-from-for.aspx

Ответ 2

Это создает строку импорта:

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)) + ',' +
        ' @[email protected]'
    AS ExportQuery
FROM
    [dbo].[sysdiagrams]
WHERE
    [name] = '' -- Diagram Name

Затем вы запускаете сгенерированную строку в другой БД.

КАК ПРОЦЕДУРА:

-- =============================================
-- 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)) + ',' +
        ' @[email protected]'
    AS ExportQuery
FROM
    [dbo].[sysdiagrams]
WHERE
    [name] = @name

Ответ 3

Вы можете избавиться от инструкции UPDATE, исправив инструкцию INSERT - в частности, часть выбора. Вы вставляете столбец diagram_id в столбец principal_id (diagram_id - это идентификатор).

Измените его на:

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

И престо, все в нем в первый раз.

Ответ 4

Как и в C Isaze, есть три простых шага:

1- Создайте одинаковое количество диаграмм "dummy" на целевом сервере, где вы хотите скопировать диаграммы

2- Добавить целевой сервер в качестве связанного сервера на исходном сервере

enter image description hereenter image description hereenter image description here

3- запустите этот script на исходном сервере

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

Ответ 5

Если базы данных находятся на разных серверах, могут возникнуть проблемы с правами.

Чтобы скопировать sysdiagrams, создайте то же количество диаграмм "dummy" на целевом сервере, на котором вы хотите скопировать диаграммы, добавьте целевой сервер в качестве связанного сервера на исходном сервере, а затем запустите 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

Ответ 6

Здесь есть инструмент для экспорта диаграмм в файл и обратно в базу данных, которую вы можете найти здесь: https://github.com/timabell/database-diagram-scm/

Вы сможете использовать это, указав его в своей исходной базе данных и сделав экспорт, а затем указывая на свою целевую базу данных и сделав импорт.