【问题标题】:Syncing stored procedures between two databases?在两个数据库之间同步存储过程?
【发布时间】:2009-06-03 15:08:09
【问题描述】:

对于我的团队正在开发的应用程序,我创建了一个数据库副本,以独立处理系统的一些可能功能。在此过程中,我更改了一些存储过程。同时,团队的其他成员继续在其他数据库上工作并更改其中的一些存储过程。

代码仍在调用相同的 SP 名称,因此我需要知道哪些存储过程已更改,以便进行正确的修复。有没有办法从一个数据库中获取所有存储过程,并将其与另一个数据库中具有相同名称的 SP 进行匹配,以查看哪些不同(除了 USES[DB1] 和 USES [DB2] 差异)。

谢谢

【问题讨论】:

    标签: sql-server-2005 stored-procedures


    【解决方案1】:

    我建议购买(或只是评估)专用工具来实现这一目标。市场上有许多产品,包括: Apex SQL DiffRedgate SQL Compare

    我已经使用 Apex SQL Diff 很多年了,我会全心全意地推荐它。

    【讨论】:

    • 我终于设法说服我的老板投资 SQL Compare。这个产品是一个救生员。
    • RedGate SQL Compare 确实是一个很棒的工具!希望我也能说服我的老板.....
    【解决方案2】:

    哎呀,这是你早该考虑的事情。一种方法:将 SP 代码提取到文件中并使用 Windiff 之类的工具。

    或者如果您必须在数据库中进行,请查看these tools

    将来,将您的 SP 脚本放入源代码管理中。您可以对更改进行分支和合并。

    【讨论】:

      【解决方案3】:

      Visual Studio 中的一个可用功能称为架构比较,它将比较所有数据库对象,例如表、视图、存储过程等。不确定您是否有该工具可用。

      另一个功能允许您比较已经成为救星的数据库中的数据。

      【讨论】:

        【解决方案4】:

        要查找事情何时发生变化,请使用:

        SELECT
            CONVERT(varchar(23),modify_date,121) AS modify_date
                ,type_desc
                ,name
            FROM sys.objects
            WHERE is_ms_shipped=0
            ORDER BY 1 DESC
        

        它将列出以下类型的项目:

        CHECK_CONSTRAINT
        DEFAULT_CONSTRAINT
        FOREIGN_KEY_CONSTRAINT
        PRIMARY_KEY_CONSTRAINT
        SQL_SCALAR_FUNCTION
        SQL_STORED_PROCEDURE
        SQL_TABLE_VALUED_FUNCTION
        SQL_TRIGGER
        UNIQUE_CONSTRAINT
        USER_TABLE
        VIEW
        

        此外,您可能想研究 CVS 或 sourcesafe 之类的东西,以便您可以签出/签入代码并拥有合并/分支功能。

        编写所有文件以分隔文件并使用 Beyond Compare 之类的工具(有免费试用版)http://www.scootersoftware.com/moreinfo.php 它可以比较目录并允许您查看每个文件的差异,具有合并功能等。

        【讨论】:

        • 似乎需要大量的手动和繁琐的工作才能做到这一点,而 SQL 比较工具(请参阅其他帖子)可以非常轻松且更可靠地完成。
        • @marc_s,是的,这些工具会很棒,但是有学习曲线和成本。他最终照我说的做了!
        【解决方案5】:

        大家好。我考虑了所有的反应,下载新软件对我来说不是一个选择。经过进一步研究,这就是我提出这个解决方案的方式。

        我只是在两个数据库中查询了所有存储过程的列表及其最近的更改日期。然后我比较了他们的更改日期并手动查看了他们的来源并进行了更改。源代码管理肯定会对此有所帮助,但有时事情超出了我的控制。

        获取我的所有 SP 名称和更改日期列表的代码如下。

        select ROUTINE_NAME, LAST_ALTERED
        from information_schema.routines
        WHERE
        Routine_Type='procedure'
        AND specific_Catalog='DATABASE_NAME' ORDER BY LAST_ALTERED
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-28
          • 2017-09-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多