Cara memeriksa tanggal perubahan terakhir dalam prosedur atau fungsi tersimpan di SQL server

182

Saya perlu memeriksa kapan fungsi diubah terakhir kali. Saya tahu cara memeriksa tanggal pembuatan (ada di jendela properti fungsi di SQL Server Management Studio).
Saya menemukan bahwa dalam SQL Server 2000 tidak mungkin untuk memeriksa tanggal modifikasi (lihat posting ini: Apakah mungkin untuk menentukan kapan prosedur tersimpan terakhir diubah dalam SQL Server 2000? )

Apakah mungkin untuk memeriksanya di SQL Server 2008? Apakah MS menambahkan beberapa fitur baru dalam tabel sistem yang memungkinkan untuk memeriksanya?

Marek Kwiendacz
sumber

Jawaban:

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

Untuk typefungsi FNbukan Puntuk prosedur. Atau Anda bisa memfilter pada kolom nama.

Chris Diver
sumber
5
tampaknya izin tertentu dapat menyebabkan hasil dihapus dari kueri ini - meskipun ada beberapa hasil yang kembali. Kami telah mengamati hasil yang berbeda berdasarkan otoritas pengguna - tetapi saya belum mempersempitnya ke otoritas mana yang terlibat. Singkat cerita: jalankan kueri ini sebagai SA jika Anda bisa memastikan Anda melihat semuanya.
Ryan Guill
1
Anda memang benar. msdn.microsoft.com/en-us/library/ms190324%28v=sql.105%29.aspx "Dalam SQL Server 2005 dan versi yang lebih baru, visibilitas metadata dalam tampilan katalog terbatas pada keamanan yang dimiliki oleh pengguna atau di mana pengguna telah diberi izin. Untuk informasi lebih lanjut, lihat Konfigurasi Visibilitas Metadata. "
Chris Diver
2
Sebuah kata peringatan. Jika OP merujuk secara eksklusif pada perubahan pada modul yang dibuat melalui pernyataan ALTER DDL, maka modify_datebisa menyesatkan. Sebagai contoh, jika sys.sp_refreshsqlmoduledijalankan pada modul, itu modify_dateakan berubah meskipun secara teknis kode modul tidak berubah.
gravidThoughts
bagaimana cara mendapatkan Prosedur Tersimpan Database Tertentu saja ?!
Irfan
2
@im_one Setelah baris WHERE, tambahkan di AND name = 'specified procedure'mana specified procedurenama proc yang disimpan yang ingin Anda temukan.
TylerH
41

Coba ini untuk prosedur tersimpan:

SELECT name, create_date, modify_date
FROM sys.objects
WHERE type = 'P'
AND name = 'myProc'
openshac
sumber
1
Ini harus menjadi jawaban yang diterima karena ini sederhana dan mudah.
user3454439
13

Ini adalah solusi yang tepat untuk menemukan fungsi:

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

Saya menemukan ini terdaftar sebagai teknik baru

Ini sangat detail

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
sumber
4

Untuk SQL 2000 saya akan menggunakan:

SELECT name, crdate, refdate 
FROM sysobjects
WHERE type = 'P' 
ORDER BY refdate desc
Simon
sumber
Bagaimana dengan 2008 ..? Bukankah itu pertanyaannya ..?
NREZ
@NREZ pertanyaan tentang sysobjects didukung pada 2008 sehingga ini akan berhasil
Paul
tanggal pembaruan bukan tanggal modifikasi terakhir. Periksa perbedaan tanggal antara sys.object dan sysobjects.
access_granted
2

Dalam versi terbaru (2012 atau lebih) kita bisa mendapatkan detail prosedur tersimpan yang dimodifikasi dengan menggunakan kueri ini

SELECT create_date, modify_date, name FROM sys.procedures 
ORDER BY modify_date DESC
LTA
sumber
0
SELECT *
FROM sys.objects
WHERE type IN ('FN', 'IF', 'TF') 
AND name = 'dgdsgds'
Kris K
sumber
1
Bolehkah saya meminta Anda untuk menambahkan beberapa konteks di sekitar jawaban Anda. Jawaban khusus kode sulit dipahami. Ini akan membantu penanya dan pembaca di masa mendatang jika Anda dapat menambahkan lebih banyak informasi dalam posting Anda.
RBT
0

Anda dapat menggunakan ini untuk memeriksa tanggal modifikasi functionsdan stored proceduresbersama - sama dipesan berdasarkan tanggal:

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

atau :

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

Hasilnya akan seperti ini:

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
sumber