SQL Server'da saklı yordam veya işlevdeki son değişiklik tarihi nasıl kontrol edilir


183

Fonksiyonun en son ne zaman değiştirildiğini kontrol etmem gerekiyor. Oluşturma tarihi nasıl kontrol biliyorum (SQL Server Management Studio işlev özellikleri penceresinde).
SQL Server 2000'de değişiklik tarihini kontrol etmenin mümkün olmadığını buldum (bu gönderiye bakın: Saklı yordamın SQL Server 2000'de en son ne zaman değiştirildiğini belirlemek mümkün mü? )

SQL Server 2008'de kontrol etmek mümkün mü? MS, sistem tablolarına kontrol edilmesine izin veren bazı yeni özellikler ekliyor mu?

Yanıtlar:


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

typeBir işlev için bir FNyerine Pprosedür. Veya ad sütununa filtre uygulayabilirsiniz.


5
belirli izinlerin sonuçların bu sorgudan çıkarılmasına neden olabileceği anlaşılıyor - geri dönen bazı sonuçlar olsa da. Kullanıcı yetkisine bağlı olarak farklı sonuçlar gözlemledik - ancak bunu hangi yetkililerin dahil olduğu konusunda daraltmadım. Uzun lafın kısası: Her şeyi gördüğünüzden emin olmak için bu sorguyu SA olarak çalıştırın.
Ryan Guill

1
Gerçekten haklısın. msdn.microsoft.com/en-us/library/ms190324%28v=sql.105%29.aspx "SQL Server 2005 ve sonraki sürümlerinde, meta görünümlerin katalog görünümlerindeki görünürlüğü, kullanıcının sahip olduğu veya hakkında daha fazla bilgi için bkz. Meta Veri Görünürlük Yapılandırması. "
Chris Diver

2
Uyarı kelimesi. OP sadece bir ALTER DDL deyimi ile yapılan bir modüldeki değişikliklere atıfta bulunuyorsa, modify_dateyanıltıcı olabilir. Örneğin sys.sp_refreshsqlmodule, modül üzerinde yürütülürse, modify_dateteknik olarak modülün kodu değişmese de değiştirilecektir.
gravidThoughts

Yalnızca Belirtilen Veritabanı Saklı Yordamlarını nasıl alabilirim ?!
Irfan

2
@ im_one WHERE satırından sonra, bulmak istediğiniz depolanmış işlemin adı AND name = 'specified procedure'nerede ekleyin specified procedure.
TylerH

41

Saklı yordamlar için bunu deneyin:

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

1
Bu kabul edilen cevap olmalı, çünkü bu basit ve anlaşılır.
user3454439

13

Bir işlevi bulmak için doğru çözüm budur:

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

7

Bunu yeni teknik olarak listeledim

Bu çok detaylı

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 için kullanacağım:

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

Peki ya 2008 ..? Soru bu değil mi ..?
NREZ

@NREZ sysobjects üzerindeki sorgular 2008'de desteklendiğinden bu işe yarayacak
Paul

refdate, son değiştirilme tarihi değil. Sys.object ve sysobjects arasındaki tarih farkını kontrol edin.
access_granted

2

En son sürümde (2012 veya daha fazla) bu sorguyu kullanarak değiştirilmiş saklı yordam ayrıntılarını alabiliriz

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
Cevabınızın etrafına biraz daha bağlam eklemenizi rica edebilir miyim? Yalnızca kod yanıtlarının anlaşılması zordur. Gönderinize daha fazla bilgi ekleyebilmeniz hem askerlere hem de gelecekteki okuyuculara yardımcı olacaktır.
RBT

0

Bunu, tarihe göre functionsve stored proceduresbirlikte sipariş tarihini kontrol etmek için kullanabilirsiniz :

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

veya:

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

Sonuç şöyle olacak:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.