SQLサーバーのストアドプロシージャまたは関数の最終変更日を確認する方法


182

前回機能が変更された日時を確認する必要があります。作成日を確認する方法を知っています(SQL Server Management Studioの関数のプロパティウィンドウにあります)。
SQL Server 2000では変更日を確認できないことがわかりました(この投稿を参照してください:SQL Server 2000でストアドプロシージャが最後に変更されたのはいつかを判断できますか?

SQL Server 2008で確認できますか?MSは、システムテーブルにチェックを可能にするいくつかの新機能を追加しますか?

回答:


385
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/en-us/library/ms190324%28v=sql.105%29.aspx "SQL Server 2005以降のバージョンでは、カタログビューでのメタデータの可視性は、ユーザーが所有またはユーザーに何らかの権限が付与されています。詳細については、メタデータの表示設定をご覧ください。
Chris Diver

2
警告の言葉。OPがALTER DDLステートメントを介して行われたモジュールへの変更のみを参照している場合、modify_date誤解を招く可能性があります。たとえばsys.sp_refreshsqlmodule、がモジュールで実行された場合modify_date、技術的にはモジュールのコードは変更されていませんが、は変更されます。
gravidThoughts

特定のデータベースストアドプロシージャのみを取得するにはどうすればよいですか。
Irfan 2018年

2
@im_one WHERE行の後に、検索するストアドプロシージャの名前をAND name = 'specified procedure'where に追加specified procedureします。
TylerH 2018

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

sysobjectsに対する@NREZクエリは2008年にサポートされているため、これは機能します
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
回答の前後にもう少し詳しい説明を追加してください。コードのみの回答は理解するのが困難です。投稿に情報を追加できれば、質問者と将来の読者の両方に役立ちます。
2017年

0

これを使用して、日付の小切手変更日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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.