在两个数据库之间同步存储过程?

时间:2009-06-03 15:08:09

标签: sql-server-2005 stored-procedures

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

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

由于

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

或者,如果您必须在数据库中执行此操作,请查看these tools

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

答案 2 :(得分:1)

Visual Studio内部可用的功能之一称为Schema Compare,它将比较所有数据库对象,例如表,视图,sprocs等。不确定您是否可以使用该工具。

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

答案 3 :(得分:0)

找到更改的内容时使用此:

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它可以比较目录并允许您查看每个文件的差异,具有合并功能等。

答案 4 :(得分:0)

嘿所有人。我考虑了所有的响应,下载新软件对我来说不是一个选择。经过进一步研究,我就是这样解决的问题。

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

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

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