对于我的团队正在开发的应用程序,我创建了一个数据库副本,以便独立地处理系统的某些可能功能。这样做,我已经改变了一些存储过程。同时,团队的其他成员继续在另一个数据库上工作并更改其中一些存储过程。
代码仍在调用相同的SP名称,因此我需要知道哪些存储过程已更改才能进行正确的修复。有没有办法从一个数据库中获取所有存储过程并将其与另一个数据库中具有相同名称的SP匹配,以查看哪些不同(除了USES [DB1]和USES [DB2]差异)。
由于
答案 0 :(得分:5)
我建议购买(或仅评估)专用工具来实现这一目标。市场上有许多产品包括: Apex SQL Diff和Redgate 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