it-swarm.com.de

Abfrage, um alle gespeicherten Prozeduren aufzulisten

Welche Abfrage kann die Namen aller gespeicherten Prozeduren in einer SQL Server-Datenbank zurückgeben

Wenn die Abfrage gespeicherte Systemprozeduren ausschließen könnte, wäre dies noch hilfreicher.

289
T - M

Wie Mike feststellte, ist der beste Weg, information_schema zu verwenden. Solange Sie sich nicht in der Master-Datenbank befinden, werden gespeicherte Systemprozeduren nicht zurückgegeben.

select * 
  from DatabaseName.information_schema.routines 
 where routine_type = 'PROCEDURE'

Wenn Sie aus einem bestimmten Grund nicht vom System gespeicherte Prozeduren in der Master-Datenbank gespeichert haben, können Sie die Abfrage verwenden (dadurch werden MOST gespeicherte Systemprozeduren herausgefiltert):

select * 
  from master.information_schema.routines 
 where routine_type = 'PROCEDURE' 
   and Left(Routine_Name, 3) NOT IN ('sp_', 'xp_', 'ms_')
436
Dave_H
SELECT name, 
       type
  FROM dbo.sysobjects
 WHERE (type = 'P')
84
Kevin

Die "bevorzugte" Methode ist meines Wissens die Verwendung der Tabellen information_schema:

select * 
  from information_schema.routines 
 where routine_type = 'PROCEDURE'
24
Mike

Sie können diese Abfrage ausprobieren, um gespeicherte Prozeduren und Funktionen abzurufen: 

SELECT name, type
FROM dbo.sysobjects
WHERE type IN (
    'P', -- stored procedures
    'FN', -- scalar functions 
    'IF', -- inline table-valued functions
    'TF' -- table-valued functions
)
ORDER BY type, name
12
MovGP0

Im Folgenden werden alle Prozeduren in der ausgewählten Datenbank zurückgegeben

SELECT * FROM sys.procedures
11
Narendra Sharma

Wenn Sie SQL Server 2005 verwenden, funktioniert Folgendes:

select *
  from sys.procedures
 where is_ms_shipped = 0
9
cbeuker

Wählen Sie Alle gespeicherten Prozeduren und Ansichten aus

select name,type,type_desc
from sys.objects
where type in ('V','P')
order by name,type
5
Lorena Pita

Sie können eine der folgenden Abfragen verwenden, um die Liste der gespeicherten Prozeduren in einer Datenbank zu finden: 

Abfrage1:

    SELECT 
        *
    FROM sys.procedures;

Abfrage2:

    SELECT 
        * 
    FROM information_schema.routines 
    WHERE ROUTINE_TYPE = 'PROCEDURE' 

Wenn Sie die Liste der all SPs in allen Datenbanken finden möchten, können Sie die folgende Abfrage verwenden:

    CREATE TABLE #ListOfSPs 
    (
        DBName varchar(100), 
        [OBJECT_ID] INT,
        SPName varchar(100)
    )

    EXEC sp_msforeachdb 'USE [?]; INSERT INTO #ListOfSPs Select ''?'', Object_Id, Name FROM sys.procedures'

    SELECT 
        * 
    FROM #ListOfSPs
5

Dies kann auch helfen, die Prozedur mit Ausnahme der Systemprozeduren aufzulisten:

select * from sys.all_objects where type='p' and is_ms_shipped=0
4
NeverHopeless

Leider enthält INFORMATION_SCHEMA keine Informationen zu den Systemprozeduren.

SELECT *
  FROM sys.objects
 WHERE objectproperty(object_id, N'IsMSShipped') = 0
   AND objectproperty(object_id, N'IsProcedure') = 1
3
Cade Roux

Nur die Namen:

SELECT SPECIFIC_NAME  
FROM YOUR_DB_NAME.information_schema.routines  
WHERE routine_type = 'PROCEDURE'
2
Ray Koren

Dadurch werden nur die Namen der gespeicherten Prozeduren angegeben.

select specific_name
from information_schema.routines
where routine_type = 'PROCEDURE';
1
The_coder

Ich schrieb dieses einfache tsql, um den Text aller gespeicherten Prozeduren aufzulisten. Stellen Sie sicher, dass Sie Ihren Datenbanknamen in das Feld eingeben.

use << database name >>
go

declare @aQuery nvarchar(1024);
declare @spName nvarchar(64);
declare allSP cursor for
select p.name  from sys.procedures p where p.type_desc = 'SQL_STORED_PROCEDURE' order by p.name;
open allSP;
fetch next from allSP into @spName;
while (@@FETCH_STATUS = 0)
begin
    set @aQuery = 'sp_helptext [Extract.' + @spName + ']';
    exec sp_executesql @aQuery;
    fetch next from allSP;
end;
close allSP;
deallocate allSP;
1
LostCajun
select *  
  from dbo.sysobjects
 where xtype = 'P'
   and status > 0
1
Bob Probst

Ich habe den hervorragenden Beitrag von LostCajun angepasst, um gespeicherte Systemprozeduren auszuschließen. Ich habe auch "Extract" entfernt. Aus dem Code, weil ich nicht herausfinden konnte, wofür es ist, und es gab mir Fehler. Die Anweisung "fetch next" innerhalb der Schleife benötigte auch eine "into" -Klausel.

use <<databasename>>
go

declare @aQuery nvarchar(1024);
declare @spName nvarchar(64);
declare allSP cursor for
    select p.name  
    from sys.procedures p 
    where p.type_desc = 'SQL_STORED_PROCEDURE' 
    and LEFT(p.name,3) NOT IN ('sp_','xp_','ms_')
    order by p.name;
open allSP;
fetch next from allSP into @spName;
while (@@FETCH_STATUS = 0)
begin
    set @aQuery = 'sp_helptext [' + @spName + ']';
    exec sp_executesql @aQuery;
    fetch next from allSP into @spName;
end;
close allSP;
deallocate allSP;
1
BaffledBill

Listen Sie alle Dinge auf, die Sie möchten

In SQL Server 2005, 2008, 2012:

Use [YourDataBase]

EXEC sp_tables @table_type = "'PROCEDURE'" 
EXEC sp_tables @table_type = "'TABLE'"
EXEC sp_tables @table_type = "'VIEW'" 

OR

SELECT * FROM information_schema.tables
SELECT * FROM information_schema.VIEWS
1
USE DBNAME

select ROUTINE_NAME from information_schema.routines 
where routine_type = 'PROCEDURE'


GO 

Dies funktioniert mit mssql.

0
user1556937
select * from DatabaseName.INFORMATION_SCHEMA.ROUTINES where routine_type = 'PROCEDURE'

select * from DatabaseName.INFORMATION_SCHEMA.ROUTINES where routine_type ='procedure' and left(ROUTINE_NAME,3) not in('sp_', 'xp_', 'ms_')


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

Verwenden Sie diesen Codeplex-Link. Dieses Dienstprogramm hilft bei der Lokalisierung aller gespeicherten Prozeduren aus der SQL-Datenbank.

https://exportmssqlproc.codeplex.com/

0
Sandeep

der beste Weg, Objekte zu erhalten, ist sys.sql_modules. Sie können alles finden, was Sie in dieser Tabelle suchen, und diese Tabelle mit einer anderen Tabelle verknüpfen, um weitere Informationen über object_id zu erhalten

SELECT o. object_id,o.name AS name,o.type_desc,m.definition,schemas.name scheamaName
FROM sys.sql_modules        m 
    INNER JOIN sys.objects  o ON m.object_id=o.OBJECT_ID
    INNER JOIN sys.schemas ON schemas.schema_id = o.schema_id
    WHERE [TYPE]='p'
0
Mohsen

Dies wird den gesamten Namen zurückgeben 

Select * 
FROM sys.procedures where [type] = 'P' 
     AND is_ms_shipped = 0 
     AND [name] not like 'sp[_]%diagram%'
0

Dies wird alle gespeicherten Prozeduren und den Code anzeigen:

select sch.name As [Schema], obj.name AS [Stored Procedure], code.definition AS [Code] from sys.objects as obj
    join sys.sql_modules as code on code.object_id = obj.object_id
    join sys.schemas as sch on sch.schema_id = obj.schema_id
    where obj.type = 'P'

So listen Sie die gespeicherten Prozeduren für eine bestimmte MySQL-Datenbank auf: 

SHOW PROCEDURE STATUS WHERE db = 'databaseName';
0
MEhsan