Как перенести диаграммы базы данных SQL Server в другую базу данных? - PullRequest
23 голосов
/ 09 февраля 2009

Моя команда недавно перестроила свою базу данных разработки SQL Server 2005 с нуля, используя исходные файлы TFS.

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

Кто-нибудь знает способ экспорта схемы базы данных SQL Server 2005 из одной базы данных в другую, которая содержит те же таблицы и объекты схемы?

UPDATE:

Ответы Валентина и CMS, приведенные ниже, должны работать отлично. Я принял Валентина, потому что он был первым, и я уже начал его использовать.

Я закончил тем, что создал временную таблицу, называемую «robsysdiagrams», и скопировал в нее все данные и использовал Мастер публикации баз данных Microsoft SQL Server для сценария вставки данных на диск. Затем я переименовал robsysdiagrams в sysdiagrams в сценарии и запустил его в целевой базе данных. Все работало нормально.

Ответы [ 10 ]

16 голосов
/ 28 сентября 2011

Старый, но элегантный ответ, с которым я столкнулся, пытаясь решить ту же проблему: bcp

Извлечь:

bcp YOUR_DATABASE..sysdiagrams out YOUR_DIAGRAM_NAME.bcp -c -T -S SERVERNAME

Для импорта:

(cd to the directory the diagram is in)
bcp YOUR_DATABASE..sysdiagrams in YOUR_DIAGRAM_NAME.bcp -c -T -S SERVERNAME
16 голосов
/ 09 февраля 2009

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

Включить диаграммы в новой базе данных:

В новой базе данных нажмите на папку «Диаграммы базы данных». Sql Server Management Studio предложит вам включить диаграммы. Если вы согласны с этим шагом, в базе данных будет таблица sysdiagrams.

Затем выполните следующее:

INSERT INTO newdb.dbo.sysdiagrams 
     SELECT name, principal_id,[version], [definition]
       FROM olddb.dbo.sysdiagrams
12 голосов
/ 09 февраля 2009

Роб, есть таблица 'sysdiagrams', которая содержит определения диаграмм. Попробуйте создать таблицу и вставить данные из старой базы данных. Это должно работать.

НТН

11 голосов
/ 09 февраля 2009
5 голосов
/ 31 октября 2013

Я думаю, что это лучший способ:

USE DestinationDatabase

DELETE  sysDiagrams
WHERE   name IN ( SELECT    name
              FROM      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    SourceDatabase.dbo.sysDiagrams

SET IDENTITY_INSERT sysDiagrams OFF
1 голос
/ 12 октября 2017

Я сделал это с помощью функции экспорта данных MSSMS.

  • Щелкните правой кнопкой мыши базу данных.
  • Выберите «Задачи»> «Экспортировать данные», чтобы запустить мастер.
  • Настройте оба источника данных. Я использовал SQL Server Native Client 11, но другие, вероятно, будут работать. Нажмите далее.
  • Выберите Скопировать данные из одной или нескольких таблиц или представлений (по умолчанию)
  • Из списка выберите таблицу sysdiagrams.
  • Выберите Изменить сопоставления. Убедитесь, что установлен флажок «Включить идентификационную вставку». Хит ок.
  • Нажмите «Далее», затем нажмите «Готово» для выполнения.

Работал как шарм.

1 голос
/ 30 октября 2013

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

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

Самое смешное, что НЕ следует пытаться открыть диаграмму копирования, потому что другая база данных, в которой она расположена, не имеет структуры таблиц моей базы данных, поэтому SQL-сервер автоматически при открытии очищает все таблицы на диаграмме q -:

1 голос
/ 02 апреля 2013

Это довольно просто, если у вас есть связанный сервер или вы все еще на той же машине:

USE newDB;

SET IDENTITY_INSERT sysdiagrams ON;

INSERT INTO sysdiagrams(name,principal_id,diagram_id,version,definition)
SELECT name,principal_id,diagram_id,version,definition
FROM oldDB..sysdiagrams;

SET IDENTITY_INSERT sysdiagrams OFF;
0 голосов
/ 20 октября 2017

Безопасный способ сделать это:

merge into TcsDev1..sysdiagrams as Trg
using TcsDev2..sysdiagrams as Src
on Trg.name = Src.Name
when not matched by target then
insert (name, principal_id, [version], [definition]) 
values (src.name, src.[principal_id],  src.[version], src.[definition] );
0 голосов
/ 12 ноября 2014

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

https://stackoverflow.com/a/26884146/951001

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...