Как Mike заявил, лучший способ состоит в том, чтобы использовать information_schema
. Пока Вы не находитесь в основной базе данных, системные хранимые процедуры не будут возвращены.
select *
from DatabaseName.information_schema.routines
where routine_type = 'PROCEDURE'
, Если по некоторым причинам у Вас были несистемные хранимые процедуры в основной базе данных, Вы могли бы использовать запрос (это отфильтрует БОЛЬШИНСТВО системных хранимых процедур):
select *
from master.information_schema.routines
where routine_type = 'PROCEDURE'
and Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_')
select *
from dbo.sysobjects
where xtype = 'P'
and status > 0
К сожалению INFORMATION_SCHEMA
не содержит информацию о системе procs.
SELECT *
FROM sys.objects
WHERE objectproperty(object_id, N'IsMSShipped') = 0
AND objectproperty(object_id, N'IsProcedure') = 1
При использовании SQL Server 2005, следующее будет работать:
select *
from sys.procedures
where is_ms_shipped = 0
От моего понимания "предпочтительного" метода должен использовать information_schema таблицы:
select *
from information_schema.routines
where routine_type = 'PROCEDURE'
SELECT name,
type
FROM dbo.sysobjects
WHERE (type = 'P')