Cách kiểm tra ngày thay đổi cuối cùng trong quy trình hoặc chức năng được lưu trữ trong máy chủ SQL


182

Tôi cần kiểm tra khi chức năng được thay đổi lần trước. Tôi biết cách kiểm tra ngày tạo (nó nằm trong cửa sổ thuộc tính hàm trong SQL Server Management Studio).
Tôi thấy rằng trong SQL Server 2000, không thể kiểm tra ngày sửa đổi (xem bài đăng này: Có thể xác định khi nào một thủ tục được lưu trữ được sửa đổi lần cuối trong SQL Server 2000 không? )

Có thể kiểm tra nó trong SQL Server 2008 không? MS có thêm một số tính năng mới trong các bảng hệ thống cho phép kiểm tra nó không?

Câu trả lời:


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

Các typechức năng là FNhơn là Pcho thủ tục. Hoặc bạn có thể lọc trên cột tên.


5
có vẻ như các quyền nhất định có thể khiến kết quả bị bỏ qua khỏi truy vấn này - mặc dù có một số kết quả trả về. Chúng tôi đã quan sát các kết quả khác nhau dựa trên quyền của người dùng - nhưng tôi đã không thu hẹp nó xuống theo các cơ quan có thẩm quyền. Câu chuyện dài: chạy truy vấn này dưới dạng SA nếu bạn có thể để đảm bảo rằng bạn đang nhìn thấy mọi thứ.
Ryan Guill

1
Bạn thực sự đúng. msdn.microsoft.com/en-us/library/ms190324%28v=sql.105%29.aspx "Trong SQL Server 2005 và các phiên bản sau, sự hiện diện của các siêu dữ liệu trong khung nhìn danh mục được giới hạn securables mà người dùng sở hữu hoặc người dùng đã được cấp một số quyền. Để biết thêm thông tin, hãy xem Cấu hình hiển thị siêu dữ liệu. "
Chris Diver

2
Một lời cảnh báo. Nếu OP chỉ đề cập đến các thay đổi đối với mô-đun được thực hiện thông qua câu lệnh ALTER DDL, thì modify_datecó thể gây hiểu nhầm. Ví dụ, nếu sys.sp_refreshsqlmoduleđược thực thi trên mô-đun, modify_datesẽ thay đổi mặc dù về mặt kỹ thuật mã của mô-đun không thay đổi.
gravidThoughts

làm thế nào chỉ có thể nhận được các thủ tục lưu trữ cơ sở dữ liệu được chỉ định?!
Irfan

2
@im_one Sau dòng WHERE, thêm AND name = 'specified procedure'nơi specified procedurelà tên của proc lưu trữ bạn muốn tìm.
TylerH

41

Hãy thử điều này cho các thủ tục được lưu trữ:

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

1
Đây phải là câu trả lời được chấp nhận vì điều này đơn giản và dễ hiểu.
dùng3454439

13

Đây là giải pháp chính xác cho việc tìm kiếm một chức năng:

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

7

Tôi thấy điều này được liệt kê như là kỹ thuật mới

Điều này rất chi tiết

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

Đối với SQL 2000 tôi sẽ sử dụng:

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

Còn năm 2008 thì sao? Đó không phải là câu hỏi ..?
NREZ

Các truy vấn @NREZ trên sysobjects được hỗ trợ vào năm 2008 vì vậy điều này sẽ hoạt động
Paul

refdate không phải là ngày sửa đổi cuối cùng. Kiểm tra sự khác biệt ngày giữa sys.object và sysobjects.
access_granted

2

Trong phiên bản mới nhất (2012 trở lên), chúng tôi có thể nhận được sửa đổi chi tiết thủ tục được lưu trữ bằng cách sử dụng truy vấn này

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
Tôi có thể yêu cầu bạn vui lòng thêm một số bối cảnh xung quanh câu trả lời của bạn. Câu trả lời chỉ có mã là khó hiểu. Nó sẽ giúp người hỏi và người đọc tương lai cả nếu bạn có thể thêm thông tin trong bài viết của mình.
RBT

0

Bạn có thể sử dụng điều này để kiểm tra ngày sửa đổi functionsstored procedurescùng nhau được sắp xếp theo ngày:

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

hoặc là :

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

Kết quả sẽ như thế này:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.