Comment rechercher un texte dans toutes les procédures stockées sur SQL Server ?

Présentation de deux méthodes pour retrouver des procédures stockées sur une base SQL Server à partir de leur définition.

Si vous utilisez des procédures dans une base de données SQL Server, alors il peut être utile de pouvoir les retrouver à partir de la définition que vous lui avez ajoutée. Il existe pour cela 2 méthodes possibles. La première consiste à utiliser la vue sys.procedures, qui contient les procédures créées dans la base de données.

SELECT name
FROM sys.procedures
WHERE Object_definition(object_id) LIKE '%chaine%'

Vous pouvez également utiliser 2 vues pour faire une recherche dans la définition de la procédure : les vues sys_sql_modules et sys_objects. La vue sys_sql_modules contient tous les objets qui sont des modules définis par le langage SQL pour la base de données SQL Server. Les procédures en font partie. La vue sys_objects contient tous les objets créés par les utilisateurs. En ajoutant une jointure entre les 2 vues, on obtient la procédure, et on récupère au passage son type pour contrôler s'il s'agit bien d'une procédure.

SELECT DISTINCT 
 o.name AS Object_Name,
 o.type_desc
 FROM sys.sql_modules m 
 INNER JOIN 
 sys.objects o 
 ON m.object_id = o.object_id
 WHERE m.definition Like '%chaine%';

Si vous recherchez un caractère spécial utilisé dans le langage transact-SQL, comme le crochet, vous devez utiliser l'antislash . De cette manière, le crochet sera interprété, non pas comme un caractère spécial mais comme un caractère simple :

SELECT name
FROM sys.procedures
WHERE Object_definition(object_id) LIKE '%[chaine]%'