29

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

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

提前致谢,

鲍勃

4

7 回答 7

69

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

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

您可以自己执行 where 子句,但这将按修改日期降序排列

于 2008-09-17T16:44:35.387 回答
11

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

SELECT name
FROM sys.objects
WHERE type = 'P'
    AND DATEDIFF(D,modify_date, GETDATE()) < X
于 2008-09-17T16:34:52.447 回答
11

Bob OMalley 可能很久以前就解决了他的问题,但希望新读者会发现这很有用。

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

一种是在开发环境中删除存储过程或其他对象——你不会使用系统视图捕捉到这一点,因为对象将不再存在。

另外,我不确定这种方法是否可以用于权限等更改。

在这种情况下,最好使用一些第三方工具来仔细检查是否有遗漏。

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

免责声明:我不隶属于我在这里提到的任何供应商,但我确实在我工作的公司中使用了这两种工具(Apex 和 RG)。

于 2013-09-04T14:04:45.067 回答
2

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

于 2008-09-17T16:32:17.570 回答
1

您还可以使用以下代码片段

USE AdventureWorks2008;

GO

SELECT SprocName=name, create_date, modify_date

FROM sys.objects

WHERE type = 'P' 

AND name = 'uspUpdateEmployeeHireInfo'

GO
于 2008-09-17T16:36:31.397 回答
0

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

SELECT name
    FROM sys.objects
    WHERE type = 'P'
        AND DATEDIFF(D,modify_date, GETDATE()) < 7
于 2008-09-17T16:33:34.210 回答
0

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

您也可以尝试使用:

SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate

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

我自己使用 SQL 比较工具,所以我不能 100% 保证该方法

于 2008-09-17T16:40:38.237 回答