Czy ktoś może doradzić w sprawie sposobu wyświetlenia wszystkich przechowywanych procedur wraz z ich nazwami schematów w bazie danych? Dzięki!Lista wszystkich procedur przechowywanych o nazwie schematu
Odpowiedz
Spróbuj tego:
SELECT
SchemaName = s.name,
ProcedureName = pr.name
FROM
sys.procedures pr
INNER JOIN
sys.schemas s ON pr.schema_id = s.schema_id
Należy wymienić wszystkich procedur przechowywanych i ich nazwy schematu jako zestaw wyników.
Oba widoki - sys.procedures
i sys.schemas
- mają jeszcze kilka atrybutów - sprawdź je, jeśli ich potrzebujesz, uwzględnij je w zapytaniu.
Dziękuję za twoją sugestię Jak używać tego do listy wszystkich przechowywanych procedur i ich schematów dla konkretnej bazy danych? – daniness
@daniness: przejdź do tej bazy danych ('use (yourdatabase)'), a następnie wykonaj ten fragment Działa tylko w bazie danych, w której aktualnie się znajduje. –
SELECT [schema] = OBJECT_SCHEMA_NAME([object_id]),
name
FROM sys.procedures;
lub
SELECT [schema] = SCHEMA_NAME([schema_id]),
name
FROM sys.procedures;
Dla konkretnej bazy danych, można po prostu zmienić kontekst do tej bazy danych po pierwsze, lub zmienić zapytanie Marca nieznacznie (moje pytania nie są dobre w tym przypadku, ponieważ opiera się na funkcjach że są kontekstowe):
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;
Jeśli chcesz to zrobić dla wszystkich baz danych:
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;
Klauzule sortowania są niezbędne, jeśli masz bazy danych z różnymi sortowaniami.
To może pomóc ..
SELECT * FROM sys.procedures;
Nie zwróci wszystkich procedur: –
Możesz użyć Generatora skryptów, aby je uzyskać. W lewym okienku kliknij prawym przyciskiem myszy bazę danych, dla której chcesz uzyskać zapisane Procedury, Zadania-> Generuj skrypty Kliknij Dalej i wybierz Wybierz określone obiekty bazy danych i wybierz Zapisane procedury, a następnie kliknij Dalej, tam możesz dostosować je według potrzeb i wygenerować skrypty.
Spróbuj tego:
execute [sys].[sp_stored_procedures]
Lub spróbuj tego, a także uzyskać wszystkie parametry:
execute [sys].[sp_sproc_columns]
Ok ... trzeba będzie pętli wszystkich katalogowych DB nazwisk z tym, ale. ..
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
Dodaj opis, dlaczego to zadziała i jak to działa. – piyushj
spróbuj 'select * from DatabaseName.information_schema.routines gdzie routine_type =„PROCEDURE'' – aserwin
Dzięki aserwin i marc_s. Skąd mam wiedzieć, to spowoduje wyświetlenie WSZYSTKICH procedur przechowywanych dla tej bazy danych b/c Uruchomiłem to i otrzymałem 164 wiersze, w porównaniu do 1510 rekordów, gdy uruchomiłem inne zapytanie, którego nie zapisałem, więc nie jestem pewien co to było :-(. – daniness