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
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%'
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).
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).
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.
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
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 ... :)