2012-09-27 17 views
9

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

+1

spróbuj 'select * from DatabaseName.information_schema.routines gdzie routine_type =„PROCEDURE'' – aserwin

+0

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

Odpowiedz

8

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.

+0

Dziękuję za twoją sugestię Jak używać tego do listy wszystkich przechowywanych procedur i ich schematów dla konkretnej bazy danych? – daniness

+0

@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. –

24
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.

2

To może pomóc ..

SELECT * FROM sys.procedures;

+0

Nie zwróci wszystkich procedur: –

0

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.

0

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. ..

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

Dodaj opis, dlaczego to zadziała i jak to działa. – piyushj

Powiązane problemy