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
risposta
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.
Grazie per il tuo suggerimento. Come utilizzerei questo per elencare tutte le stored procedure ei loro schemi per un database specifico? – daniness
@daniness: vai a quel database ('use (yourdatabase)') e poi esegui questo snippet di codice. Funziona solo con il database in cui ci si trova. –
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.
Questo può aiutare ..
SELECT * FROM sys.procedures;
Non restituisce tutte le procedure. –
È 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.
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. ..
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
Aggiungere una descrizione, perché funzionerà e come funziona. – piyushj
provare 'select * from DatabaseName.information_schema.routines dove routine_type = 'PROCEDURE'' – aserwin
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