【问题标题】:How to check date of last change in stored procedure or function in SQL server如何检查 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 是否在允许检查的系统表中添加了一些新功能?

【问题讨论】:

    标签: sql-server-2008 stored-procedures sql-server-2008-r2 sql-function


    【解决方案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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多