如何在SQL Server中快速识别最近修改的存储过程

时间:2008-09-17 16:29:01

标签: sql-server stored-procedures migration

我需要手动将已修改的存储过程从DEV SQL Server 2005数据库实例迁移到TEST实例。除了我正在迁移的更改之外,数据库具有相同的模式。如何快速识别DEV数据库中已修改哪些存储过程以迁移到TEST实例?

我假设我可以针对某些系统表编写查询来查看类型存储过程的数据库对象,按某种最后修改或编译的数据进行排序,但我不确定。也许有人可以指出我的某种免费实用程序。

提前致谢,

鲍勃

7 个答案:

答案 0 :(得分:54)

而不是使用不再推荐的sysobjects使用sys.procedures

select name,create_date,modify_date
from sys.procedures
order by modify_date desc

您可以自己执行where子句,但这会按照修改日期降序的顺序列出

答案 1 :(得分:11)

鲍勃·奥斯利很久以前可能已经解决了他的问题,但希望新读者会觉得这很有用。

在某些特殊情况下,脚本可能无法提供最佳结果。

一种是在开发环境中删除存储过程或其他对象 - 您不会使用系统视图捕获它,因为对象将不再存在。

另外,我不确定这种方法是否适用于权限和类似的更改。

在这种情况下,最好不要使用某些第三方工具来检查没有任何内容。

我过去曾成功地使用ApexSQL Diff来完成类似的任务,并且它在具有1000多个对象的大型数据库上工作得非常好但是你不能错过SQL Compare,这里已经提到过或基本上任何其他工具存在于市场上。

免责声明:我与我在此提及的任何供应商没有任何关系,但我确实在我工作的公司中使用这两套工具(Apex和RG)。

答案 2 :(得分:9)

您可以执行此查询以查找在过去x天内修改的所有存储过程:

SELECT name
FROM sys.objects
WHERE type = 'P'
    AND DATEDIFF(D,modify_date, GETDATE()) < X

答案 3 :(得分:2)

虽然不是免费的,但我在使用Red-Gates SQL Compare tool方面有很好的经验。它过去对我有用。他们有免费试用版,可能足以解决您当前的问题。

答案 4 :(得分:1)

您还可以使用以下代码段

USE AdventureWorks2008;

GO

SELECT SprocName=name, create_date, modify_date

FROM sys.objects

WHERE type = 'P' 

AND name = 'uspUpdateEmployeeHireInfo'

GO

答案 5 :(得分:0)

您可以使用以下类型的查询来查找修改后的存储过程,您可以根据需要使用任意数字,然后再使用

SELECT名称     来自sys.objects     WHERE type ='P'         AND DATEDIFF(D,modify_date,GETDATE())&lt; 7

答案 6 :(得分:0)

有几种数据库比较工具。我一直喜欢的是Red Gate的SQLCompare。

您也可以尝试使用:

SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate

在SQL 2000中并不总是有效,因为使用ALTER没有正确更新日期,但在2005年我认为问题已得到解决。

我自己使用SQL比较工具,所以我无法保证100%的方法