我在测试数据库中创建了一个新的数据库图表,它位于sitde01服务器上。现在我想将它迁移到另一个服务器。如何将其迁移至另一个服务器。
我在测试数据库中创建了一个新的数据库图表,它位于sitde01服务器上。现在我想将它迁移到另一个服务器。如何将其迁移至另一个服务器。
虽然这可以实现,但是非常麻烦。以下是过程的概述和一些脚本。
图表存储在名为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实例(或服务器)上,情况会更加困难。我使用临时创建的Linked Server定义,并使用多年以前费劲心血编写的脚本来修改它们(即发布不同的问题,以便知道如何操作),并使用适当的四部分命名约定修改脚本。其他选项(如OPENROWSET等)也可能可行,但我对它们的了解更少。
Copy the information from the dbo.sysDiagrams table in the temporary database into the dbo.sysDiagram table of your target database. You could do something like this (adapted the code from Philip Kelley):
USE TargetDatabase
SET identity_insert sysDiagrams on
INSERT sysDiagrams (name, principal_id, diagram_id, version, definition)
select name, principal_id, diagram_id, version, definition
from TempDatabase.dbo.sysDiagrams
SET identity_insert sysDiagrams off
这个解决方案对我非常有效。当然,如果您不想要所有的图表或目标数据库中存在其他图表,则需要过滤选择语句并进行一些identity_insert操作,但这不应该太难。