Comment exporter un diagramme de base de données SQL Server 2008 vers une autre base de données?
j'utilise L'outil pratique de base de données Schamming dans SQL Server 2008 pour créer et gérer des relations. J'ai exporté la sourceDB vers la destinationDB mais le diagramme n'est pas trouvé.
je regarde autour de moi pour essayer de comprendre comment exporter juste le diagramme que j'ai dans une base de données à une autre... Ce en ligne l'article de échoue depuis select * from dtproperties
n'existe plus.
6 réponses
@Ash j'avais le même problème. Voilà ce qu'on a fait pour le contourner...
il semble que les diagrammes de système soient stockés dans la table "sysdiagrammes". Donc, la première chose que vous devez faire est de déterminer la diagram_id du Diagramme que vous souhaitez copier. Exécuter la requête suivante pour les énumérer tous. ** Notez que vous devez remplacer "SourceDB" par le nom de votre base de données.
-- List all database diagrams
SELECT * FROM [SourceDB].[dbo].sysdiagrams
alors vous pouvez utiliser INSERT pour dupliquer le diagramme d'une base de données à une autre comme suivre. ** Noter de nouveau remplacer " SourceDB "par le nom de la base de données contenant le diagramme existant et" DestinationDB " par le nom de la base de données à laquelle vous souhaitez copier. De plus, @SourceDiagramId doit être défini à l'id récupéré ci-dessus.
-- 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
Ensuite, vous devez définir le "principal_id" à 1 manuellement.
-- 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
cela a fonctionné pour nous il semble assez hacky d'autant plus que le diagramme est stocké entièrement dans un seul champ binaire "définition."
la réponse vient from:
http://www.dotnetspider.com/resources/21180-Copy-or-move-database-digram-from-for.aspx
Cela génère un importer de la chaîne:
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
ensuite, vous exécutez la chaîne générée dans un autre DB.
procédure:
-- =============================================
-- 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
Vous pouvez vous débarrasser de l' UPDATE
déclaration en corrigeant votre INSERT
état - en particulier la partie select. Vous insérez le diagram_id
colonne dans le principal_id
colonne (diagram_id est une identité).
Modifier:
DECLARE @SourceDiagramId int = 1
INSERT INTO [DestinationDB].[dbo].sysdiagrams
SELECT [name],principal_id,version,definition from [SourceDB].[dbo].sysdiagrams
WHERE diagram_id = @SourceDiagramId
Et hop, tout est là dès la première fois.
comme dans C Isaze réponse, il y a trois étapes simples:
1 - Créer le même nombre de "dummy" diagrammes dans le serveur cible où vous souhaitez copier les diagrammes
2-Ajouter le serveur cible comme un serveur lié dans le serveur source
3-exécutez ce script sur le serveur source
update [LINKEDSERVER].TARGETDB.[dbo].sysdiagrams set [definition]=
(SELECT [definition] from SOURCEDB.[dbo].sysdiagrams WHERE diagram_id = 1)
where diagram_id=1
Si les bases de données sont dans des serveurs différents, il peut y avoir des problèmes d'autorisation.
pour copier les sysdiagrammes, créez le même nombre de diagrammes "fictifs" dans le serveur cible où vous voulez copier les diagrammes, ajoutez le serveur cible comme un serveur lié dans le serveur source et ensuite lancez le 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
il y a un outil pour exporter les diagrammes vers file et revenir dans une base de données que vous pouvez trouver ici:https://github.com/timabell/database-diagram-scm/
vous pouvez utiliser ceci en pointant votre base de données originale et en faisant une exportation, puis en pointant votre base de données cible et en faisant une importation.