这是可以做到的,但这是一种皇家的痛苦。以下是流程的概要和一些脚本。
图表存储在名为 sysDiagrams 的“系统”表中。当您单击 SSMS 中的图表节点时,会创建此表(仅?),它会询问您是否要创建支持图表的对象,然后单击“是”。在源数据库和目标数据库上都这样做。
在“源”数据库中创建一个或多个图表。
查看 sysDiagrams 的结构和内容。请注意,diagram_id 列是一个标识列。每个图表存储 1 行。 (你不在乎,但在 SQL 2000 中它曾经是 4 或 5 行。)
要复制到同一 SQL 实例上的另一个数据库,最简单的方法是在表之间执行 INSERT...SELECT...。使用该标识列,您将不得不对 SET IDENTITY_INSERT 大惊小怪,并且可能在目标计算机上分配一个新的标识值。刺激性,但不是非常难。
以下脚本会将所有图表从一个数据库复制到同一服务器上的另一个数据库(这就是我如何从容易被删除和重新创建的数据库中归档需要很长时间才能创建的复杂图表):
USE TargetDatabase
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
要复制到另一个数据库在不同的 SQL 实例(或服务器)上,嗯,它变得更加困难。我使用临时创建的链接服务器定义,使用多年前我汗流浃背的脚本,并且永远不想再次修改(即发布一个不同的问题,以便知道的人可以告诉你它们是如何工作的),并使用适当的四个修改脚本 -部分命名约定。其他选项(OPENROWSET 等)也是可能的,但我对这些更不熟悉。