如何快速识别 SQL Server 中最近修改的存储过程
-
01-07-2019 - |
题
我需要手动将修改后的存储过程从 DEV SQL Server 2005 数据库实例迁移到 TEST 实例。除了我要迁移的更改之外,数据库具有相同的架构。如何快速识别DEV数据库中哪些存储过程被修改并迁移到TEST实例?
我假设我可以针对某些系统表编写查询来查看存储过程类型的数据库对象,按某种上次修改或编译的数据进行排序,但我不确定。也许有人可以向我指出某种免费实用程序。
提前致谢,
鲍勃
解决方案
不再推荐使用 sysobjects,而是使用 sys.procedures
select name,create_date,modify_date
from sys.procedures
order by modify_date desc
您可以自己执行 where 子句,但这会按照修改日期降序排列它
其他提示
鲍勃·奥马利(Bob OMalley)可能很久以前就解决了他的问题,但希望新读者会发现这很有用。
在某些特殊情况下,脚本可能无法提供最佳结果。
一种是删除开发环境中的存储过程或其他对象 - 您将无法使用系统视图捕获此操作,因为对象将不再存在于其中。
另外,我不太确定这种方法是否适用于权限等更改。
在这种情况下,最好使用一些第三方工具来仔细检查是否遗漏了任何内容。
我已经成功使用了 ApexSQL 差异 过去,对于类似的任务,它在具有 1000 多个对象的大型数据库上运行得非常好,但是使用这里已经提到的 SQL Compare 或基本上市场上存在的任何其他工具都不会出错。
免责声明:我不隶属于我在这里提到的任何供应商,但我确实在我工作的公司中使用了这两套工具(Apex 和 RG)。
您可以执行此查询来查找最近 x 天修改的所有存储过程:
SELECT name
FROM sys.objects
WHERE type = 'P'
AND DATEDIFF(D,modify_date, GETDATE()) < X
虽然不是免费的,但我在使用 Red-Gates 方面有很好的经验 SQL比较工具. 。它过去对我有用。他们提供免费试用版,这可能足以解决您当前的问题。
您还可以使用以下代码片段
USE AdventureWorks2008;
GO
SELECT SprocName=name, create_date, modify_date
FROM sys.objects
WHERE type = 'P'
AND name = 'uspUpdateEmployeeHireInfo'
GO
您可以使用以下类型的查询来查找修改的存储过程,您可以根据您的需要使用 7 之后的任何数字
从sys.Objects中选择type ='p'和datediff(d,modify_date,getdate())<7的名称
有几种数据库比较工具。我一直喜欢的一个是 SQLCompare by 红门.
您还可以尝试使用:
SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate
在 SQL 2000 中,这并不总是有效,因为使用 ALTER 不能正确更新日期,但在 2005 年,我相信问题已得到解决。
不过我自己使用 SQL 比较工具,所以我不能 100% 保证该方法