2010-10-25 4 views
30

Ich benutze das handliche Database Diagramming Tool in SQL Server 2008 zum Erstellen und Verwalten von Beziehungen. Ich habe die Quelldatenbank in die Zieldatenbank exportiert, aber das Diagramm wird nicht angezeigt.So exportieren Sie ein SQL Server 2008-Datenbankdiagramm in eine andere DB?

Ich suche um herauszufinden, wie nur das Diagramm in einer Datenbank zu einem anderen exportieren ... online KB article schlägt fehl, da select * from dtproperties nicht mehr existiert.

Antwort

44

@Ash Ich hatte das gleiche Problem. Hier ist, was wir getan haben, um es zu umgehen ...

Es scheint, dass Systemdiagramme in der Tabelle "sysdiagrams" gespeichert sind. Das erste, was Sie tun müssen, ist die diagram_id des Diagramms, das Sie kopieren möchten. Führen Sie die folgende Abfrage aus, um sie alle aufzulisten. ** Beachten Sie, dass Sie "SourceDB" durch den Namen Ihrer Datenbank ersetzen müssen.

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

Dann können Sie INSERT verwenden, um das Diagramm von einer Datenbank in eine andere wie folgt zu duplizieren. ** Hinweis: Ersetzen Sie "SourceDB" erneut durch den Namen der Datenbank, die das vorhandene Diagramm enthält, und "DestinationDB" durch den Namen der Datenbank, in die Sie kopieren möchten. Auch @SourceDiagramId sollte auf die oben abgerufene ID gesetzt werden.

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

Dann müssen Sie den "principal_id" auf 1 manuell einzustellen.

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

Das funktionierte für uns ist es besonders schön Hacky scheint da das Diagramm vollständig in einer einzelnen binären Feld „Definition“ gespeichert ist.

Antwort kommt:
http://www.dotnetspider.com/resources/21180-Copy-or-move-database-digram-from-for.aspx

+0

Es funktioniert gut, auch für mich. Vielen Dank. –

7

Sie können Ihre INSERT Aussage durch die Festsetzung der UPDATE Anweisung loszuwerden - speziell den Auswahlteil. Sie fügen die Spalte diagram_id in die Spalte principal_id ein (diagram_id ist eine Identität).

Ändern Sie es an:

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

Und presto, es ist alles da drin gleich beim ersten Mal.

4

Wenn sich die Datenbanken auf verschiedenen Servern befinden, kann es zu Berechtigungsproblemen kommen.

die sysdiagrams kopieren, die gleiche Anzahl von „Dummy“ Diagramme in dem Zielserver erstellen, in dem Sie die Diagramme kopieren möchten, den Zielserver als Linked Server in der Serverquelle hinzufügen und dann das Skript ausführen:

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 
11

Dies erzeugt eine import string:

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 

Als nächstes Sie die generierte Zeichenfolge in anderen DB laufen.

Als VERFAHREN:

-- ============================================= 
-- 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 
+6

Dies kann beim Übertragen von Diagrammen zwischen verschiedenen Servern verwendet werden. Um Limit von SQL Management Studio für die Ergebnisgröße zu vermeiden, fügen Sie am Ende von sql select 'für xml auto' hinzu. Die XML-Ausgabe ist auf 2 MB begrenzt und kann auf mehr gesetzt werden. Dann schneiden Sie einfach die SQL aus dem XML und auf einem anderen Server ausführen (Sie müssen mindestens ein Diagramm manuell erstellt haben) –

+2

Dies ist perfekt hack .. – Halim

5

Wie in C Isaze Antwort gibt es drei einfachen Schritten:

1- Erstellen Sie die gleiche Anzahl von "Dummy" Diagramme in dem Zielserver, wo Sie wollen kopieren Sie die Diagramme

2- Fügen Sie den Zielserver als Verbindungsserver in dem Quellserver

enter image description here enter image description here enter image description here

3- Lauf dieses Skript auf dem Quellserver

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

Es ist ein Werkzeug, um die Diagramme für den Export und zurück in eine Datenbank-Datei, die Sie hier finden: https://github.com/timabell/database-diagram-scm/

Sie können dies verwenden, indem Sie es auf Ihre ursprüngliche Datenbank richten und einen Export ausführen und dann auf Ihre Zieldatenbank zeigen und einen Import durchführen.

Verwandte Themen