web-dev-qa-db-fra.com

Rechercher une procédure stockée par nom

Est-il possible de trouver une procédure stockée dans SQL Server Management Studio par nom ou par partie du nom? (sur le contexte de base de données actif)

Merci pour l'aide

63
gruber

Vous pouvez utiliser:

select * 
from 
   sys.procedures 
where 
   name like '%name_of_proc%'

si vous avez besoin du code, vous pouvez regarder dans la table syscomments

select text 
from 
    syscomments c
    inner join sys.procedures p on p.object_id = c.object_id
where 
    p.name like '%name_of_proc%'

Modifier la mise à jour:

vous pouvez également utiliser la version standard Ansi

SELECT * 
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_NAME LIKE '%name_of_proc%'
109
Preet Sangha

En supposant que vous soyez dans les détails de l'explorateur d'objets (F7) affichant la liste des procédures stockées, cliquez sur le bouton Filtres et entrez le nom (ou le nom partiel).

alt text

39
Codesleuth

Cela fonctionnera aussi bien pour les tables et les vues (entre autres), pas seulement pour les sprocs:

SELECT
    '[' + s.name + '].[' + o.Name + ']',
    o.type_desc
FROM
    sys.objects o
    JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE
    o.name = 'CreateAllTheThings' -- if you are certain of the exact name
    OR o.name LIKE '%CreateAllThe%' -- if you are not so certain

Il vous donne également le nom du schéma qui sera utile dans toute base de données non triviale (par exemple une base dans laquelle vous avez besoin d’une requête pour trouver une procédure stockée par son nom).

5
nathanchere

Vous pouvez utiliser cette requête:

SELECT 
    ROUTINE_CATALOG AS DatabaseName ,
    ROUTINE_SCHEMA AS SchemaName,
    SPECIFIC_NAME AS SPName ,
    ROUTINE_DEFINITION AS SPBody ,
    CREATED AS CreatedDate,
    LAST_ALTERED AS LastModificationDate
FROM INFORMATION_SCHEMA.ROUTINES
WHERE 
    (ROUTINE_DEFINITION LIKE '%%')
    AND 
    (ROUTINE_TYPE='PROCEDURE')
    AND
    (SPECIFIC_NAME LIKE '%AssessmentToolDegreeDel')

Comme vous pouvez le constater, vous pouvez également effectuer des recherches dans le corps de la procédure stockée.

1
Ardalan Shahgholi

Quand j'ai un nom de procédure de magasin et que je ne sais pas à quelle base de données il appartient, j'utilise ce qui suit -

Use [master]
GO

DECLARE @dbname VARCHAR(50)   
DECLARE @statement NVARCHAR(max)

DECLARE db_cursor CURSOR 
LOCAL FAST_FORWARD
FOR  
--Status 48 (mirrored db)
SELECT name FROM MASTER.dbo.sysdatabases WHERE STATUS NOT LIKE 48 AND name NOT IN ('master','model','msdb','tempdb','distribution')  

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @dbname  
WHILE @@FETCH_STATUS = 0  
BEGIN  

SELECT @statement = 'SELECT * FROM ['+@dbname+'].INFORMATION_SCHEMA.ROUTINES  WHERE [ROUTINE_NAME] LIKE ''%name_of_proc%'''+';'
print @statement

EXEC sp_executesql @statement

FETCH NEXT FROM db_cursor INTO @dbname  
END  
CLOSE db_cursor  
DEALLOCATE db_cursor
0
Radagast_Brown

Très bon truc je tombe sur d'essayer une injection SQL, dans l'explorateur d'objets de la boîte de recherche, utilisez simplement votre pourcentage de caractères, et cela recherchera TOUT le processus stocké, fonctions, vues, tables, schémas, index ... :)

Modèle de recherche

0
Ernest Gunning