2009-02-09 11 views
20

Mon équipe a récemment reconstruit leur base de données de développement SQL Server 2005 à partir de zéro en utilisant les fichiers source TFS. Par la suite, nous avions une base de données propre et agréable qui correspondait mieux à nos environnements de test et de production. Cependant, nous avons également perdu les diagrammes de base de données qui avaient été créés au cours des mois dans l'ancienne base de données de développement.Comment migrer les diagrammes de base de données SQL Server vers une autre base de données?

Est-ce que quelqu'un connaît un moyen d'exporter un diagramme de base de données SQL Server 2005 d'une base de données à une autre contenant les mêmes tables et objets de schéma?

MISE À JOUR:

Les deux Valentin et les réponses de la CMS ci-dessous devrait fonctionner très bien. J'ai accepté Valentin parce que c'était le premier et que j'avais déjà commencé à l'utiliser. J'ai fini par créer une table temporaire appelée 'robsysdiagrams' et j'ai copié toutes les données dans celle-ci et utilisé Microsoft SQL Server Database Publishing Wizard pour écrire les insertions de données sur le disque. J'ai ensuite renommé robsysdiagrams en sysdiagrams dans le script et l'ai exécuté sur la base de données de destination. Tout a bien fonctionné.

Répondre

12

Rob, Il existe une table 'sysdiagrams' qui contient les définitions de diagramme. Essayez de créer la table et insérez les données de l'ancienne base de données. Ça devrait marcher.

HTH

11

Vous pouvez script the diagrams (archive link) dans un fichier sql ...

+0

Pour SQL Server 2008 existe aussi le [scénario] (http://www.conceptdevelopment.net/Database/ScriptDiagram2008/) – tsionyx

+1

@ T_12 Votre lien est maintenant mort - en as-tu un qui fonctionne encore? – Bridge

+0

lien fonctionne pour moi –

12

En supposant que vous avez accès aux deux bases de données dans une instance SQL Server.

diagrammes Activer dans la nouvelle base de données:

Dans la nouvelle base de données, cliquez sur le dossier « Schémas de base de données ». Sql Server Management Studio vous invite à activer les diagrammes. Si vous avez cette étape, vous aurez une table sysdiagrams dans la base de données.

Ensuite, exécutez les éléments suivants:

INSERT INTO newdb.dbo.sysdiagrams 
    SELECT name, principal_id,[version], [definition] 
     FROM olddb.dbo.sysdiagrams 
12

Une vieille mais élégante réponse que je suis tombé sur tout en cherchant à résoudre le même problème: bcp

Pour extraire:

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

Pour importation:

(cd to the directory the diagram is in) 
bcp YOUR_DATABASE..sysdiagrams in YOUR_DIAGRAM_NAME.bcp -c -T -S SERVERNAME 
+0

Excellent one-liner, agréable et simple. – Matt

+0

Solution brillante, +1 :) –

+0

Vraiment utile, merci beaucoup – hitman

1

Il est assez facile, si vous avez un serveur lié ou lorsque vous êtes toujours sur la même machine:

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

Mon problème est que je dois parfois de laisser tomber ma base de données et le recréer. J'ai un script de génération complète qui crée tout sauf les diagrammes.

Ma solution de contournement consiste à copier temporairement le diagramme dans une autre base de données et de le recopier après la régénération de la base de données.La chose amusante est, il ne faut PAS essayer d'ouvrir le diagramme de copie, car l'autre base de données où il se trouve n'a pas les structures de table de ma base de données, donc le serveur SQL automatiquement à l'ouverture efface toutes les tables du diagramme Q-:

4

Je pense que cela est la meilleure façon:

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 
0

Je l'ai fait en utilisant la fonction Exporter des données de MSSMS.

  • Cliquez à droite sur la base de données.
  • Sélectionnez Tâches> Exporter les données, ce qui lance un assistant.
  • Configurez les deux sources de données. J'ai utilisé SQL Server Native Client 11, mais d'autres fonctionneront probablement. Cliquez sur Suivant.
  • Choisissez Copier les données d'une ou de plusieurs tables ou vues (par défaut)
  • Dans la liste, choisissez la table des diagrammes système.
  • Choisissez Modifier les correspondances. Assurez-vous que 'Activer l'insertion d'identité' est cochée. Frappez ok.
  • Cliquez sur suivant, puis appuyez sur Terminer pour exécuter.

A travaillé comme un charme.

0

plus sûr de le faire:

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]); 
Questions connexes