2012-09-27 8 views
9

Qualcuno può consigliare un modo per elencare tutte le stored procedure insieme ai loro nomi di schema in un database? Grazie!Elenca tutte le stored procedure con nome schema

+1

provare 'select * from DatabaseName.information_schema.routines dove routine_type = 'PROCEDURE'' – aserwin

+0

Grazie, aserwin e marc_s. Come faccio a sapere che questo elencherà TUTTE le stored procedure per questo database b/c l'ho eseguito e ho ottenuto 164 righe, rispetto a 1.510 record quando ho eseguito un'altra query, che non ho salvato, quindi non sono sicuro di cosa fosse :-(. – daniness

risposta

8

Prova questo:

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

Questo dovrebbe elencare tutte le stored procedure e il loro nome schema come un set di risultati.

Entrambe le viste - sys.procedures e sys.schemas - hanno un numero ancora maggiore di attributi: verificali, se ne hai bisogno, includili nella tua query.

+0

Grazie per il tuo suggerimento. Come utilizzerei questo per elencare tutte le stored procedure ei loro schemi per un database specifico? – daniness

+0

@daniness: vai a quel database ('use (yourdatabase)') e poi esegui questo snippet di codice. Funziona solo con il database in cui ci si trova. –

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

o

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

Per un database specifico, si può semplicemente cambiare il contesto a quel database prima, o modificare un po 'di query di Marc (le mie domande non sono buone in questo caso, perché si basano sulle funzioni che sono sensibili al contesto):

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; 

Se si vuole fare questo per tutti i database:

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; 

Le clausole di confronto sono necessarie nel caso in cui si disponga di database con regole di confronto differenti.

2

Questo può aiutare ..

SELECT * FROM sys.procedures;

+0

Non restituisce tutte le procedure. –

0

È possibile utilizzare Script Generator per ottenerli. Nel riquadro sinistro fare clic con il pulsante destro del mouse sul database per il quale si desidera ottenere stored procedure, Attività-> Genera script Fare clic su Avanti e selezionare Seleziona oggetti database specifici e selezionare Procedure memorizzate e fare clic su Avanti, lì è possibile personalizzare come necessario e generare il script.

0

Prova questo:

execute [sys].[sp_stored_procedures] 

Oppure provate questo e anche ottenere tutti i parametri:

execute [sys].[sp_sproc_columns] 

Ok ... dovrete scorrere tutti i nomi di catalogo DB con questo, ma. ..

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

Aggiungere una descrizione, perché funzionerà e come funziona. – piyushj