2012-09-27 3 views
9

Может ли кто-нибудь посоветовать о способе перечислить все хранимые процедуры вместе с именами их схем в базе данных? Благодаря!Список всех хранимых процедур с именем схемы

+1

попробовать 'выбрать * из DatabaseName.information_schema.routines где routine_type =«PROCEDURE'' – aserwin

+0

Спасибо, aserwin и marc_s. Как я узнаю, что это будет список ВСЕХ хранимых процедур для этой базы данных b/c Я запустил это и получил 164 строки по сравнению с 1,510 записями, когда я запускал другой запрос, который я не сохранил, поэтому я не уверен, что это было :-(. – daniness

ответ

8

Попробуйте это:

SELECT 
    SchemaName = s.name, 
    ProcedureName = pr.name 
FROM 
    sys.procedures pr 
INNER JOIN 
    sys.schemas s ON pr.schema_id = s.schema_id 

Это должны быть перечислены все хранимые процедуры и их имя схемы в качестве результирующего набора.

Оба представления - sys.procedures и sys.schemas - имеют еще несколько атрибутов - проверьте их, если они вам нужны, включите их в свой запрос.

+0

Спасибо за ваше предложение. Как я могу использовать это для перечисления всех хранимых процедур и их схем для конкретной базы данных? – daniness

+0

@ daniness: перейдите в эту базу данных ('use (yourdatabase)'), а затем выполните этот фрагмент code: –

24
SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]), 
    name 
FROM sys.procedures; 

или

SELECT [schema] = SCHEMA_NAME([schema_id]), 
    name 
FROM sys.procedures; 

Для конкретной базы данных, вы можете просто изменить контекст этой базы данных первым, или немного изменить запрос Марка, (мои запросы не хорошо в этом случае, потому что они полагаются на функции которые являются контекстно-зависимым):

SELECT 
    SchemaName = s.name, 
    ProcedureName = pr.name 
FROM 
    databasename.sys.procedures pr 
INNER JOIN 
    databasename.sys.schemas s ON pr.schema_id = s.schema_id; 

Если вы хотите сделать это для всех баз данных:

DECLARE @sql NVARCHAR(MAX) = N''; 

SELECT @sql += N' 
    UNION ALL SELECT db = N''' + name + ''', 
    s.name COLLATE Latin1_General_CI_AI, 
    o.name COLLATE Latin1_General_CI_AI 
    FROM ' + QUOTENAME(name) + '.sys.procedures AS o 
    INNER JOIN ' + QUOTENAME(name) + '.sys.schemas AS s 
    ON o.[schema_id] = s.[schema_id]' 
FROM sys.databases 
-- WHERE ... -- probably don't need system databases at least 

SELECT @sql = STUFF(@sql, 1, 18, '') 
    -- you may have to adjust ^^ 18 due to copy/paste, cr/lf, tabs etc 
    + ' ORDER BY by db, s.name, o.name'; 

EXEC sp_executesql @sql; 

Предложения сопоставления необходимы, если у вас есть базы данных с различными сортировками.

2

это может помочь вам ..

SELECT * FROM sys.procedures;

+0

Он не будет возвращать все процедуры. –

0

Вы можете использовать Script Generator для их получения. В левой панели щелкните правой кнопкой мыши по базе данных, для которой вы хотите получить хранимые процедуры, Задачи-> Сгенерировать скрипты. Нажмите «Далее» и выберите «Выбрать конкретные объекты базы данных» и выберите «Хранимые процедуры» и нажмите «Далее», там вы можете настроить, как вам нужно, и создать скрипты.

0

Попробуйте это:

execute [sys].[sp_stored_procedures] 

Или попробовать это, а также получить все параметры:

execute [sys].[sp_sproc_columns] 

Хорошо ... Вы должны перебрать все имена каталогов БД с этим, но. ..

0
SELECT name,crdate FROM dbo.sysobjects WHERE (type = 'P') order by name 

SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),name FROM sys.procedures; 

select OBJECT_SCHEMA_NAME([object_id]) as 'SchemaName',name as 'SP Name ' , 

create_date,modify_date FROM sys.procedures order by OBJECT_SCHEMA_NAME([object_id]), name 
+1

Добавьте описание к нему, почему он будет работать и как он работает. – piyushj

Смежные вопросы