Come controllare la data dell'ultima modifica nella stored procedure o nella funzione nel server SQL


182

Devo verificare quando l'ultima funzione è stata modificata. So come controllare la data di creazione (è nella finestra delle proprietà della funzione in SQL Server Management Studio).
Ho scoperto che in SQL Server 2000 non è stato possibile verificare la data di modifica (guardare questo post: è possibile determinare quando è stata modificata l'ultima volta una procedura memorizzata in SQL Server 2000? )

È possibile verificarlo in SQL Server 2008? MS aggiunge alcune nuove funzionalità nelle tabelle di sistema che consentono di verificarlo?

Risposte:


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

La typefunzione for è FNanziché Pper la procedura. Oppure puoi filtrare sulla colonna del nome.


5
sembra che determinate autorizzazioni possano causare l'omissione dei risultati da questa query, anche se ci sono alcuni risultati che restituiscono. Abbiamo osservato risultati diversi in base all'autorità dell'utente, ma non l'ho limitato a quali autorità sono coinvolte. Per farla breve: esegui questa query come SA se puoi assicurarti di vedere tutto.
Ryan Guill,

1
Hai davvero ragione. msdn.microsoft.com/en-us/library/ms190324%28v=sql.105%29.aspx "In SQL Server 2005 e versioni successive, la visibilità dei metadati nelle viste del catalogo è limitata ai dispositivi di sicurezza che un utente possiede o per cui all'utente è stata concessa un'autorizzazione. Per ulteriori informazioni, consultare Configurazione della visibilità dei metadati. "
Chris Diver,

2
Un avvertimento. Se l'OP si riferisce esclusivamente alle modifiche apportate a un modulo tramite un'istruzione ALTER DDL, modify_datepuò essere fuorviante. Ad esempio, se sys.sp_refreshsqlmoduleviene eseguito sul modulo, modify_dateverrà modificato anche se tecnicamente il codice del modulo non è cambiato.
gravid

come possono ottenere solo le stored procedure del database specificato ?!
Irfan,

2
@im_one Dopo la riga WHERE, aggiungi AND name = 'specified procedure'dov'è specified procedureil nome del proc memorizzato che vuoi trovare.
TylerH,

41

Prova questo per le procedure memorizzate:

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

1
Questa dovrebbe essere la risposta accettata perché è semplice e diretta.
user3454439

13

Questa è la soluzione corretta per trovare una funzione:

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

7

Ho trovato questo elencato come la nuova tecnica

Questo è molto dettagliato

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

Per SQL 2000 vorrei usare:

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

E il 2008 ..? Non è questa la domanda ...?
NREZ,

Le query @NREZ su sysobjects sono supportate nel 2008, quindi funzionerà
Paul

refdate non è la data dell'ultima modifica. Controlla la differenza di data tra sys.object e sysobjects.
access_granted

2

Nell'ultima versione (2012 o più) è possibile ottenere i dettagli della procedura memorizzata modificata utilizzando questa query

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
Posso chiederti di aggiungere un altro contesto alla tua risposta. Le risposte di solo codice sono difficili da capire. Aiuterà il richiedente e i futuri lettori sia se è possibile aggiungere ulteriori informazioni nel tuo post.
RBT

0

Puoi usarlo per controllare la data di modifica functionse stored proceduresinsieme ordinati per data:

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

o :

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

Il risultato sarà così:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.