So überprüfen Sie das Datum der letzten Änderung der gespeicherten Prozedur oder Funktion in SQL Server


181

Ich muss überprüfen, wann die Funktion das letzte Mal geändert wurde. Ich kann das Erstellungsdatum überprüfen (es befindet sich im Fenster mit den Funktionseigenschaften in SQL Server Management Studio).
Ich habe festgestellt, dass in SQL Server 2000 das Änderungsdatum nicht überprüft werden konnte (siehe diesen Beitrag: Kann festgestellt werden, wann eine gespeicherte Prozedur zuletzt in SQL Server 2000 geändert wurde? )

Ist es möglich, dies in SQL Server 2008 zu überprüfen? Fügt MS einige neue Funktionen in Systemtabellen hinzu, mit denen diese überprüft werden können?

Antworten:


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

Das typefür eine Funktion ist FNeher als Pfür die Prozedur. Oder Sie können nach der Namensspalte filtern.


5
Es scheint, dass bestimmte Berechtigungen dazu führen können, dass Ergebnisse in dieser Abfrage weggelassen werden - obwohl einige Ergebnisse zurückgegeben werden. Wir haben unterschiedliche Ergebnisse basierend auf der Benutzerautorität beobachtet - aber ich habe nicht eingegrenzt, auf welche Autoritäten es sich bezieht. Lange Rede, kurzer Sinn: Führen Sie diese Abfrage als SA aus, wenn Sie können, um sicherzustellen, dass Sie alles sehen.
Ryan Guill

1
Sie sind in der Tat richtig. msdn.microsoft.com/en-us/library/ms190324%28v=sql.105%29.aspx "In SQL Server 2005 und späteren Versionen ist die Sichtbarkeit der Metadaten in Katalogansichten auf sichere Elemente beschränkt, die ein Benutzer entweder besitzt oder besitzt Informationen, für die dem Benutzer eine Berechtigung erteilt wurde. Weitere Informationen finden Sie unter Konfiguration der Sichtbarkeit von Metadaten. "
Chris Diver

1
Ein Wort der Warnung. Wenn sich das OP ausschließlich auf Änderungen an einem Modul bezieht, die über eine ALTER DDL-Anweisung vorgenommen wurden, modify_datekann dies irreführend sein. Wenn es beispielsweise sys.sp_refreshsqlmoduleauf dem Modul ausgeführt wird, modify_datewird das geändert, obwohl sich der Code des Moduls technisch nicht geändert hat.
gravidThoughts

Wie können nur die angegebenen gespeicherten Datenbankprozeduren abgerufen werden?!
Irfan

2
@im_one Fügen Sie nach der Zeile WHERE hinzu, AND name = 'specified procedure'wo specified proceduresich der Name des gespeicherten Prozesses befindet, den Sie suchen möchten.
TylerH

41

Versuchen Sie dies für gespeicherte Prozeduren:

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

1
Dies sollte die akzeptierte Antwort sein, da dies einfach und unkompliziert ist.
user3454439

13

Dies ist die richtige Lösung, um eine Funktion zu finden:

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

7

Ich fand dies als die neue Technik aufgeführt

Das ist sehr detailliert

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

Für SQL 2000 würde ich verwenden:

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

Was ist mit 2008 ..? Ist das nicht die Frage ..?
NREZ

@ NEZ-Abfragen zu Sysobjekten werden 2008 unterstützt, daher funktioniert dies
Paul

refdate ist nicht das letzte Änderungsdatum. Überprüfen Sie den Datumsunterschied zwischen sys.object und sysobjects.
access_granted

2

In der neuesten Version (2012 oder höher) können wir mithilfe dieser Abfrage Details zu gespeicherten Prozeduren abrufen

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
Darf ich Sie bitten, Ihrer Antwort einen weiteren Kontext hinzuzufügen. Nur-Code-Antworten sind schwer zu verstehen. Es wird sowohl dem Fragesteller als auch zukünftigen Lesern helfen, wenn Sie Ihrem Beitrag weitere Informationen hinzufügen können.
RBT

0

Sie können dies verwenden, um das Änderungsdatum von functionsund stored procedureszusammen nach Datum sortiert zu überprüfen :

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

oder :

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

Das Ergebnis wird folgendermaßen aussehen:

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.