如何将SQL Server数据库图表迁移到另一个数据库?

时间:2009-02-09 07:16:09

标签: sql-server database sql-server-2005

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

之后,我们有一个很好的干净数据库,更贴近我们的测试和生产环境。但是,我们也丢失了旧开发数据库中几个月创建的数据库图表。

是否有人知道将SQL Server 2005数据库关系图从一个数据库导出到包含相同表和架构对象的另一个数据库的方法?

更新:

Valentin和CMS的答案都应该可以正常使用。我接受了Valentin,因为它是第一次,我已经开始使用了它。

我最终创建了一个名为'robsysdiagrams'的临时表,并将所有数据复制到该表中,并使用Microsoft SQL Server Database Publishing Wizard编写数据插入到磁盘的脚本。然后我在脚本中将robsysdiagrams重命名为sysdiagrams并在目标数据库上运行它。一切都很好。

10 个答案:

答案 0 :(得分:16)

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

在新数据库中启用图表:

在新数据库中,单击“Database Diagrams”文件夹。 Sql Server Management Studio将提示您输入图表。如果您执行此步骤,则数据库中将包含sysdiagrams表。

然后执行以下操作:

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

答案 1 :(得分:16)

我在寻找解决同一问题的过程中遇到了一个古老而优雅的答案: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

答案 2 :(得分:12)

罗布 有一个表'sysdiagrams',它包含图表定义。 尝试创建表并从旧数据库插入数据。 它应该工作。

HTH

答案 3 :(得分:11)

您可以script the diagramsarchive link)到.sql文件...

答案 4 :(得分:5)

我认为这是更好的方式:

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

答案 5 :(得分:1)

如果您有链接服务器或仍在同一台计算机上,这很容易:

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;

答案 6 :(得分:1)

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

我的解决方法是暂时将图表复制到另一个数据库,并在我的数据库重新生成后将其复制回来。

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

答案 7 :(得分:1)

我是使用MSSMS的导出数据功能完成的。

  • 右键单击数据库。
  • 选择任务>导出数据,启动向导。
  • 设置两个数据源。我使用的是SQL Server Native Client 11,但其他人可能会工作。点击下一步。
  • 选择从一个或多个表格或视图复制数据(默认)
  • 从列表中选择sysdiagrams表。
  • 选择“编辑映射”。确保'启用身份插入'检查。点击确定。
  • 单击“下一步”,然后单击“完成”以执行。

像魅力一样工作。

答案 8 :(得分:0)

您可以直接复制之前的答案。如果你想备份'只有您可以做的图表,请参阅我在其他问题上的答案。

https://stackoverflow.com/a/26884146/951001

答案 9 :(得分:0)

更安全的方式:

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] );