web-dev-qa-db-fra.com

Requête pour répertorier toutes les procédures stockées

Quelle requête peut renvoyer les noms de toutes les procédures stockées dans une base de données SQL Server

Si la requête pouvait exclure des procédures stockées système, cela serait encore plus utile.

289
T - M

Comme Mike l'a dit, le meilleur moyen est d'utiliser information_schema. Tant que vous n'êtes pas dans la base de données master, les procédures stockées système ne seront pas renvoyées.

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

Si, pour une raison quelconque, la base de données master contient des procédures stockées non système, vous pouvez utiliser la requête (ceci filtrera les procédures stockées système MOST):

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

D'après ce que j'ai compris, la méthode "préférée" consiste à utiliser les tables information_schema:

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

Vous pouvez essayer cette requête pour obtenir des procédures et des fonctions stockées: 

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

Ce qui suit retournera toutes les procédures dans la base de données sélectionnée

SELECT * FROM sys.procedures
11
Narendra Sharma

Si vous utilisez SQL Server 2005, les opérations suivantes fonctionneront:

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

Sélectionner toutes les procédures et vues stockées

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

Vous pouvez utiliser l'une des requêtes ci-dessous pour trouver la liste des procédures stockées dans une base de données: 

Requête 1:

    SELECT 
        *
    FROM sys.procedures;

Requête2:

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

Si vous voulez trouver la liste de tous les SP dans toutes les bases de données vous pouvez utiliser la requête ci-dessous:

    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
Ardalan Shahgholi

Cela peut aussi aider à lister les procédures sauf les procédures système:

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

Malheureusement, INFORMATION_SCHEMA ne contient pas d'informations sur les processus système.

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

Juste les noms:

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

Cela ne donnera que les noms des procédures stockées.

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

J'ai écrit ce simple tsql pour lister le texte de toutes les procédures stockées. Assurez-vous de substituer votre nom de base de données dans le champ.

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

J'ai peaufiné l'excellent message de LostCajun ci-dessus pour exclure les procédures stockées système. J'ai aussi enlevé "Extrait". du code parce que je ne pouvais pas comprendre ce que c'est et ça m'a donné des erreurs. L'instruction "fetch next" dans la boucle avait également besoin d'une clause "into".

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

Ceci, liste toutes les choses que tu veux

Dans 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
Reza Zendehboudi
USE DBNAME

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


GO 

Cela fonctionnera sur 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
Chandan Ravandur N

Essayez ce lien codeplex, cet utilitaire aide à localiser toutes les procédures stockées à partir de la base de données SQL.

https://exportmssqlproc.codeplex.com/

0
Sandeep

le meilleur moyen d'obtenir des objets est d'utiliser sys.sql_modules. vous pouvez trouver tout ce que vous voulez dans cette table et joindre cette table à une autre table pour obtenir plus d'informations par object_id

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

Cela retournera tous les noms sp 

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

Cela va montrer toutes les procédures stockées et le code:

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'

Pour lister les procédures stockées pour une base de données MySQL particulière: 

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