Như Mike đã nêu, cách tốt nhất là sử dụng information_schema
. Miễn là bạn không ở trong cơ sở dữ liệu chính, các thủ tục được lưu trữ trong hệ thống sẽ không được trả lại.
SELECT *
FROM DatabaseName.INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
Nếu vì lý do nào đó, bạn có các thủ tục được lưu trữ không thuộc hệ thống trong cơ sở dữ liệu chính, bạn có thể sử dụng truy vấn (điều này sẽ lọc ra các thủ tục được lưu trữ trong hệ thống MOST):
SELECT *
FROM [master].INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
AND LEFT(ROUTINE_NAME, 3) NOT IN ('sp_', 'xp_', 'ms_')