Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server 如何将SQL Server数据库关系图迁移到另一个数据库?_Sql Server_Database_Sql Server 2005 - Fatal编程技术网

Sql server 如何将SQL Server数据库关系图迁移到另一个数据库?

Sql server 如何将SQL Server数据库关系图迁移到另一个数据库?,sql-server,database,sql-server-2005,Sql Server,Database,Sql Server 2005,我的团队最近使用TFS源文件从头开始重建了SQL Server 2005开发数据库 之后,我们有了一个非常干净的数据库,它与我们的测试和生产环境更加匹配。然而,我们也丢失了几个月来在旧开发数据库中创建的数据库关系图 有人知道如何将SQL Server 2005数据库关系图从一个数据库导出到另一个包含相同表和模式对象的数据库吗 更新: Valentin和CMS下面的答案应该都很好。我接受了瓦伦丁的,因为这是第一个,我已经开始使用它了 我最终创建了一个名为“robsysdiagrams”的临时表,并

我的团队最近使用TFS源文件从头开始重建了SQL Server 2005开发数据库

之后,我们有了一个非常干净的数据库,它与我们的测试和生产环境更加匹配。然而,我们也丢失了几个月来在旧开发数据库中创建的数据库关系图

有人知道如何将SQL Server 2005数据库关系图从一个数据库导出到另一个包含相同表和模式对象的数据库吗

更新:

Valentin和CMS下面的答案应该都很好。我接受了瓦伦丁的,因为这是第一个,我已经开始使用它了

我最终创建了一个名为“robsysdiagrams”的临时表,并将所有数据复制到该表中,并使用脚本将数据插入到磁盘中。然后我在脚本中将robsysdiagrams重命名为sysdiagrams,并在目标数据库上运行它。一切正常。

罗布, 有一个表“sysdiagrams”,其中包含图表定义。 尝试创建表并插入旧数据库中的数据。 它应该会起作用


HTH

您可以()访问.sql文件…

假设您可以访问sql Server实例中的两个数据库

在新数据库中启用图表:

INSERT INTO newdb.dbo.sysdiagrams 
     SELECT name, principal_id,[version], [definition]
       FROM olddb.dbo.sysdiagrams
在新数据库中,单击“数据库图表”文件夹。SQLServerManagementStudio将提示您创建图表。如果确定此步骤,则数据库中将有一个sysdiagrams表

然后执行以下操作:

INSERT INTO newdb.dbo.sysdiagrams 
     SELECT name, principal_id,[version], [definition]
       FROM olddb.dbo.sysdiagrams

当我试图解决同样的问题时,我遇到了一个古老而优雅的答案:
bcp

摘录:

bcp YOUR_DATABASE..sysdiagrams out YOUR_DIAGRAM_NAME.bcp -c -T -S SERVERNAME
要导入:

(cd to the directory the diagram is in)
bcp YOUR_DATABASE..sysdiagrams in YOUR_DIAGRAM_NAME.bcp -c -T -S SERVERNAME

如果您有一个链接服务器,或者您仍然在同一台机器上,那么这非常简单:

USE newDB;

SET IDENTITY_INSERT sysdiagrams ON;

INSERT INTO sysdiagrams(name,principal_id,diagram_id,version,definition)
SELECT name,principal_id,diagram_id,version,definition
FROM oldDB..sysdiagrams;

SET IDENTITY_INSERT sysdiagrams OFF;

我的问题是,有时我需要删除数据库并重新创建它。我有一个完整的生成脚本,它创建了除图表以外的所有内容

我的解决方法是将关系图临时复制到另一个数据库,然后在数据库重新生成后将其复制回来


有趣的是,不应该尝试打开复制关系图,因为它所在的另一个数据库没有我的数据库的表结构,所以打开时SQL server会自动清除关系图中的所有表q-:

我认为这是更好的方法:

USE DestinationDatabase

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

您可以按照前面的回答直接复制。如果您只想“备份”图表,您可以这样做,请参阅我对其他问题的回答


我使用MSSMS的导出数据功能完成了这项工作

  • 右键单击数据库
  • 选择任务>导出数据,这将启动向导
  • 设置两个数据源。我使用了SQLServerNativeClient11,但其他的可能会工作。单击下一步
  • 选择“从一个或多个表或视图复制数据”(默认设置)
  • 从列表中,选择sysdiagrams表
  • 选择编辑映射。确保选中了“启用标识插入”。点击ok
  • 单击next,然后单击Finish执行
工作得很有魅力

更安全的方法:

merge into TcsDev1..sysdiagrams as Trg
using TcsDev2..sysdiagrams as Src
on Trg.name = Src.Name
when not matched by target then
insert (name, principal_id, [version], [definition]) 
values (src.name, src.[principal_id],  src.[version], src.[definition] );

优秀的一行程序,美观且简单。普通的插入对大型图表不起作用(当您想要打开图表时,它会显示一个弹出窗口:错误文件已损坏),使用bcp命令是一种解理解决方案,它应该是唯一被接受的解决方案。对于SQL Server 2008,也存在@T_12,您的链接现在已失效-您有一个仍然有效的吗?