Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将数据库关系图从一台服务器移动到另一台服务器_Sql_Sql Server_Sql Server 2005_Sql Server 2008_Database Diagram - Fatal编程技术网

Sql 如何将数据库关系图从一台服务器移动到另一台服务器

Sql 如何将数据库关系图从一台服务器移动到另一台服务器,sql,sql-server,sql-server-2005,sql-server-2008,database-diagram,Sql,Sql Server,Sql Server 2005,Sql Server 2008,Database Diagram,我在测试数据库中创建了一个新的数据库关系图,它位于sitde01服务器中。现在我想把它移到另一台服务器上。如何将其迁移到另一台服务器。为了移动数据库关系图,您需要迁移该关系图中包含的所有表和触发器。要做到这一点,最简单的方法是备份数据库并在另一台服务器上还原。这是可以做到的,但这是一件非常痛苦的事情。下面是流程的概要和一些脚本 图表存储在名为sysDiagrams的“系统”表中。此表(仅?)在您单击SSMS中的“图表”节点时创建,它询问您是否要创建支持图表的对象,然后单击“是”。在源数据库和目标

我在测试数据库中创建了一个新的数据库关系图,它位于sitde01服务器中。现在我想把它移到另一台服务器上。如何将其迁移到另一台服务器。

为了移动数据库关系图,您需要迁移该关系图中包含的所有表和触发器。要做到这一点,最简单的方法是备份数据库并在另一台服务器上还原。

这是可以做到的,但这是一件非常痛苦的事情。下面是流程的概要和一些脚本

图表存储在名为sysDiagrams的“系统”表中。此表(仅?)在您单击SSMS中的“图表”节点时创建,它询问您是否要创建支持图表的对象,然后单击“是”。在源数据库和目标数据库上都这样做

在“源”数据库中创建一个或多个图表

回顾系统图的结构和内容。请注意,列
diagram\u id
是一个标识列。为每个图存储1行。(您不在乎,但在SQL 2000中它过去是4或5行。)

要复制到同一SQL实例上的另一个数据库,最简单的方法是执行INSERT。。。选择。。。在桌子之间。有了标识列,您将不得不对SET identity_INSERT大惊小怪,并可能在目标计算机上分配一个新的标识值。令人恼火,但不是很难

以下脚本将所有关系图从一个数据库复制到同一服务器上的另一个数据库(这就是我如何从容易被删除和重新创建的数据库中归档耗时太长的复杂关系图的方式):


要复制到另一个SQL实例(或服务器)上的另一个数据库,就更难了。我使用临时创建的链接服务器定义,使用几年前我一直在使用的脚本,不想再修改(即,发布不同的问题,以便知道它们是如何工作的)并使用适当的四部分命名约定修改脚本。其他选项(OPENROWSET等)也是可能的,但我对它们更不熟悉。

如果您想将图表从一个实例或服务器移动到另一个实例或服务器,并且不想恢复整个数据库,可以执行以下操作

  • 如果不存在,请在目标服务器上创建数据库。您还必须单击SSMS中的“Database Diagrams”节点,让它创建一个dbo.sysDiagrams表
  • 然后确保导入图表中所需的所有模式信息。因为您的图表将指向这些。即必须有表格、PK、FK等
  • 在源服务器上备份数据库
  • 将其还原到目标服务器上的临时数据库中。通过这种方式,您可以将所有关系图信息输入目标服务器
  • 将临时数据库中dbo.sysDiagrams表中的信息复制到目标数据库的dbo.sysDiagram表中。您可以这样做(改编自Philip Kelley的代码):


  • 这个解决方案对我非常有效。当然,如果您不想要所有的图表,或者如果目标数据库中存在其他图表,则必须过滤select语句并执行一些identity\u insert操作,但这应该不会太难。

    备份和还原是我知道您可以迁移图表的唯一方法。我不想进行备份和还原,因为服务器中的表不一样。除了备份和恢复,还有其他方法吗?图表只是所有PK和FK的直观视图。。。您可以轻松地创建一个脚本,用此信息更新现有数据库。@balexandre-一点也不正确。在图表中,可以有文本注释。另外,图表中表格的图形布局可以传达表格在逻辑上是如何组合在一起的。+1:这对我很有用。因为我在同一台服务器上,所以这并不是什么大不了的事,但在找到这个脚本之前,我有点挣扎。
    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
    
    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