Como verificar a data da última alteração no procedimento armazenado ou na função no SQL server

182

Preciso verificar quando a função foi alterada da última vez. Eu sei como verificar a data de criação (está na janela de propriedades da função no SQL Server Management Studio).
Descobri que no SQL Server 2000 não era possível verificar a data de modificação (veja esta postagem: É possível determinar quando um procedimento armazenado foi modificado pela última vez no SQL Server 2000? )

É possível verificá-lo no SQL Server 2008? A Microsoft adiciona algum novo recurso às tabelas do sistema que permitem verificá-lo?

Marek Kwiendacz
fonte

Respostas:

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

A typefunção for é FNmais do que Pprocedure. Ou você pode filtrar na coluna de nome.

Chris Diver
fonte
5
parece que certas permissões podem fazer com que os resultados sejam omitidos nessa consulta - mesmo que alguns resultados retornem. Observamos resultados diferentes com base na autoridade do usuário - mas eu não o reduzi a quais autoridades estão envolvidas. Para encurtar a história: execute esta consulta como SA, se puder, para ter certeza de que está vendo tudo.
Ryan Guill
1
Você está realmente correto. msdn.microsoft.com/en-us/library/ms190324%28v=sql.105%29.aspx "No SQL Server 2005 e em versões posteriores, a visibilidade dos metadados nas exibições de catálogo é limitada a protegíveis que um usuário possui ou em que o usuário recebeu alguma permissão. Para obter mais informações, consulte Configuração de visibilidade de metadados ".
Chris Diver
2
Uma palavra de alerta. Se o OP estiver se referindo exclusivamente a alterações em um módulo feitas por meio de uma instrução ALTER DDL, isso modify_datepode ser enganoso. Por exemplo, se sys.sp_refreshsqlmodulefor executado no módulo, modify_dateele será alterado, embora tecnicamente o código do módulo não tenha sido alterado.
gravidThoughts
como pode obter apenas os procedimentos armazenados do banco de dados especificado ?!
quer
2
@im_one Após a linha WHERE, adicione AND name = 'specified procedure'onde specified procedureestá o nome do processo armazenado que você deseja encontrar.
precisa saber é o seguinte
41

Tente isso para procedimentos armazenados:

SELECT name, create_date, modify_date
FROM sys.objects
WHERE type = 'P'
AND name = 'myProc'
openshac
fonte
1
Essa deve ser a resposta aceita, porque é simples e direta.
user3454439 7/01
13

Esta é a solução correta para encontrar uma função:

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

Achei isso listado como a nova técnica

Isto é muito detalhado

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 
Arun Prasad ES
fonte
4

Para o SQL 2000, eu usaria:

SELECT name, crdate, refdate 
FROM sysobjects
WHERE type = 'P' 
ORDER BY refdate desc
Simon
fonte
E quanto a 2008 ..? Não é essa a pergunta ..?
NREZ 19/08/2013
Consultas @NREZ no sysobjects são suportados em 2008, para isso vai funcionar
Paul
refdate não é a data da última modificação. Verifique a diferença de data entre sys.object e sysobjects.
ACCESS_GRANTED
2

Na versão mais recente (2012 ou mais), podemos obter detalhes modificados do procedimento armazenado usando esta consulta

SELECT create_date, modify_date, name FROM sys.procedures 
ORDER BY modify_date DESC
LTA
fonte
0
SELECT *
FROM sys.objects
WHERE type IN ('FN', 'IF', 'TF') 
AND name = 'dgdsgds'
Kris K
fonte
1
Posso solicitar que você adicione um pouco mais de contexto à sua resposta. As respostas somente de código são difíceis de entender. Isso ajudará os solicitantes e futuros leitores, se você puder adicionar mais informações em sua postagem.
RBT
0

Você pode usar isso para verificar a data de modificação functionse, stored proceduresjuntos, ordenados por 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

ou:

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

O resultado será assim:

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
Mohamad Reza Shahrestani
fonte