如何检查SQL Server中存储过程或函数的最后更改日期


181

我需要检查上次更改功能的时间。我知道如何检查创建日期(在SQL Server Management Studio的函数属性窗口中)。
我发现在SQL Server 2000中无法检查修改日期(请看这篇文章:是否可以确定何时在SQL Server 2000中最后一次修改存储过程?

是否可以在SQL Server 2008中进行检查?MS是否在允许检查它的系统表中添加了一些新功能?

Answers:


383
SELECT name, create_date, modify_date 
FROM sys.objects
WHERE type = 'P'
ORDER BY modify_date DESC

type一个函数FN,而不是P为程序。或者,您可以在名称列上进行过滤。


5
似乎某些权限可能导致此查询中的结果被忽略-即使有一些结果返回。我们根据用户权限观察到了不同的结果-但我没有将其范围缩小到涉及到的权限。长话短说:如果可以确保以查看所有内容,请以SA身份运行此查询。
瑞安·吉尔

1
你确实是对的。msdn.microsoft.com/zh-cn/library/ms190324%28v=sql.105%29.aspx “在SQL Server 2005和更高版本中,目录视图中元数据的可见性仅限于用户拥有或拥有的安全性有关已授予用户某些权限的信息。有关更多信息,请参见元数据可见性配置。
克里斯·迪弗

1
一句话警告。如果OP仅指通过ALTER DDL语句对模块进行的更改,则modify_date可能会引起误解。例如,如果sys.sp_refreshsqlmodule在模块上执行,modify_date即使技术上模块代码未更改,也将更改。
gravidThoughts

怎么可能只获得指定的数据库存储过程?
伊尔凡(Irfan)'18

2
@im_one的WHERE线后,加AND name = 'specified procedure'那里specified procedure是你想要找的存储过程的名称。
TylerH

41

尝试使用此存储过程:

SELECT name, create_date, modify_date
FROM sys.objects
WHERE type = 'P'
AND name = 'myProc'

1
这应该是公认的答案,因为这很简单明了。
user3454439

13

这是找到函数的正确解决方案:

SELECT name, create_date, modify_date
FROM sys.objects
WHERE type = 'fn'
AND name = 'fn_NAME'

7

我发现这被列为新技术

这很详细

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = N'PROCEDURE' and ROUTINE_SCHEMA = N'dbo' 
order by  LAST_ALTERED desc

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = N'PROCEDURE' and ROUTINE_SCHEMA = N'dbo' 
order by  CREATED desc 


SELECT * FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = N'FUNCTION' and ROUTINE_SCHEMA = N'dbo' 
order by  LAST_ALTERED desc

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = N'FUNCTION' and ROUTINE_SCHEMA = N'dbo' 
order by  CREATED desc 

4

对于SQL 2000,我将使用:

SELECT name, crdate, refdate 
FROM sysobjects
WHERE type = 'P' 
ORDER BY refdate desc

那2008 .. 这不是问题吗?
NREZ 2013年

在2008年支持对sysobjects的@NREZ查询,因此可以使用
Paul

refdate不是最后修改日期。检查sys.object和sysobjects之间的日期差异。
access_granted

2

在最新版本(2012或更高版本)中,我们可以使用此查询来获取修改的存储过程详细信息

SELECT create_date, modify_date, name FROM sys.procedures 
ORDER BY modify_date DESC

0
SELECT *
FROM sys.objects
WHERE type IN ('FN', 'IF', 'TF') 
AND name = 'dgdsgds'

1
请允许我在您的答案周围添加更多背景信息。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,它将对询问者和将来的读者都有帮助。
RBT

0

您可以将其用于检查修改日期,functions并按日期stored procedures一起排序:

SELECT 'Stored procedure' as [Type] ,name, create_date, modify_date 
FROM sys.objects
WHERE type = 'P' 

UNION all

Select 'Function' as [Type],name, create_date, modify_date
FROM sys.objects
WHERE type = 'FN'
ORDER BY modify_date DESC

要么 :

SELECT type ,name, create_date, modify_date 
FROM sys.objects
WHERE type in('P','FN') 
ORDER BY modify_date DESC
-- this one shows type like : FN for function and P for stored procedure

结果将是这样的:

Type                 |  name      | create_date              |  modify_date
'Stored procedure'   | 'firstSp'  | 2018-08-04 07:36:40.890  |  2019-09-05 05:18:53.157
'Stored procedure'   | 'secondSp' | 2017-10-15 19:39:27.950  |  2019-09-05 05:15:14.963
'Function'           | 'firstFn'  | 2019-09-05 05:08:53.707  |  2019-09-05 05:08:53.707
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.