【问题标题】:How do you migrate SQL Server Database Diagrams to another Database?如何将 SQL Server 数据库图表迁移到另一个数据库?
【发布时间】:2010-10-06 08:29:36
【问题描述】:

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

之后,我们有了一个非常干净的数据库,与我们的测试和生产环境更加匹配。但是,我们也丢失了过去几个月在旧开发数据库中创建的数据库图表。

有谁知道如何将 SQL Server 2005 数据库图表从一个数据库导出到另一个包含相同表和架构对象的数据库?

更新:

以下 Valentin 和 CMS 的答案都应该可以正常工作。我接受了 Valentin's,因为它是第一个而且我已经开始使用它。

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

【问题讨论】:

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


    【解决方案1】:

    我在寻求解决同一问题时遇到的一个古老但优雅的答案: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
    

    【讨论】:

    • 优秀的单线,美观又简单。
    • 普通插入不适用于大图(打开图时会弹出:错误文件已损坏),使用bcp命令是一种切割器解决方案,应该是独特的公认解决方案。
    【解决方案2】:

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

    在新数据库中启用图表:

    在新数据库中单击“Database Diagrams”文件夹。 Sql Server Management Studio 将提示您启用图表。如果你确定这一步,你将在数据库中有一个 sysdiagrams 表。

    然后执行以下操作:

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

    【讨论】:

      【解决方案3】:

      罗伯, 有一个表'sysdiagrams'保存图表定义。 尝试创建表并插入旧数据库中的数据。 它应该可以工作。

      HTH

      【讨论】:

        【解决方案4】:

        您可以将script the diagrams (archive link) 转换为 .sql 文件...

        【讨论】:

        • 对于 SQL Server 2008 也存在 script
        • @T_12 你的链接现在失效了 - 你有一个仍然有效的链接吗?
        【解决方案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
        

        【讨论】:

          【解决方案6】:

          如果你有一个链接服务器或者你仍然在同一台机器上,这很容易:

          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;
          

          【讨论】:

            【解决方案7】:

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

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

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

            【讨论】:

              【解决方案8】:

              我使用 MSSMS 的导出数据功能做到了这一点。

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

              工作就像一个魅力。

              【讨论】:

                【解决方案9】:

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

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

                【讨论】:

                  【解决方案10】:

                  更安全的方法:

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-12-28
                    • 2013-09-25
                    • 2016-05-03
                    • 1970-01-01
                    相关资源
                    最近更新 更多