SQL修改存储过程创建日期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL修改存储过程创建日期相关的知识,希望对你有一定的参考价值。

在SQL中如何修改系统存储过程创建时间?用下面的方法不行么?
线面是把u创建时间设置成'2007-1-20' 运行后显示影响行数为一行 但是时间没有变化啊 请教高手~~~
sp_configure 'allow updates',1
reconfigure with override
go
update sysobjects set crdate='2007-1-20' where id=object_id('u')
go
sp_configure 'allow updates',0
reconfigure with override
查询分析器里面显示影响行数为一行 好像是改过来了
但是实际文件上的时间还是原来的时间没有动啊

你的方法是正确的。相信自己,没错的。
我用sp_who试了下,时间改过来了

已将配置选项 'allow updates' 从 0 改为 1。请运行 RECONFIGURE 语句以安装。

(所影响的行数为 1 行)

已将配置选项 'allow updates' 从 1 改为 0。请运行 RECONFIGURE 语句以安装。
参考技术A #2007-1-20#

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

【中文标题】如何检查 SQL Server 中存储过程或函数的最后更改日期【英文标题】:How to check date of last change in stored procedure or function in SQL server 【发布时间】:2011-07-31 13:20:45 【问题描述】:

我需要检查上次更改功能的时间。我知道如何检查创建日期(它位于 SQL Server Management Studio 的函数属性窗口中)。 我发现在 SQL Server 2000 中无法检查修改日期(看这篇文章:Is it possible to determine when a stored procedure was last modified in SQL Server 2000?)

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

【问题讨论】:

【参考方案1】:
SELECT name, create_date, modify_date 
FROM sys.objects
WHERE type = 'P'
ORDER BY modify_date DESC

函数的typeFN 而不是过程的P。或者您可以按名称列进行过滤。

【讨论】:

似乎某些权限可能会导致此查询中省略结果 - 即使有一些结果返回。我们观察到基于用户权限的不同结果——但我没有将其缩小到涉及哪些权限。长话短说:尽可能以 SA 身份运行此查询,以确保您看到所有内容。 你确实是对的。 msdn.microsoft.com/en-us/library/ms190324%28v=sql.105%29.aspx “在 SQL Server 2005 及更高版本中,元数据在目录视图中的可见性仅限于用户拥有或已被授予某些权限的安全对象。有关详细信息,请参阅元数据可见性配置。” 一句警告。如果 OP 专门指的是通过 ALTER DDL 语句对模块进行的更改,那么modify_date 可能会产生误导。例如,如果在模块上执行sys.sp_refreshsqlmodule,即使技术上模块的代码没有改变,modify_date 也会改变。 怎么可能只得到指定的数据库存储过程?! @im_one 在 WHERE 行之后,添加 AND name = 'specified procedure' 其中specified procedure 是您要查找的存储过程的名称。【参考方案2】:

对存储过程试试这个:

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

【讨论】:

这应该是公认的答案,因为这简单明了。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

我发现这被列为新技术

这个很详细

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 

【讨论】:

【参考方案5】:

对于 SQL 2000,我会使用:

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

【讨论】:

2008 年怎么样..?不是这个问题吗..? @NREZ 对 sysobjects 的查询在 2008 年受支持,因此可以使用 refdate 不是最后修改日期。检查 sys.object 和 sysobjects 之间的日期差异。【参考方案6】:

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

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

【讨论】:

【参考方案7】:
SELECT *
FROM sys.objects
WHERE type IN ('FN', 'IF', 'TF') 
AND name = 'dgdsgds'

【讨论】:

能否请您为您的答案添加更多上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。【参考方案8】:

您可以使用它来检查functionsstored 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

【讨论】:

以上是关于SQL修改存储过程创建日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server基础之存储过程

SQL Server基础之存储过程

关于SQL创建存储过程的

SQL 查询表字段长度, 名称, 类型, 存储过程创建和修改时间

sqlserver 如何修改存储过程的名字

SQL Server存储过程创建和修改