Comment identifier toutes les procédures stockées référençant une table particulière

J’ai créé une table sur l’environnement de développement à des fins de test et il y a peu de sp qui se réfèrent à cette table. Maintenant, je dois laisser tomber cette table et identifier tous les sp qui font référence à cette table. J’ai du mal à trouver la liste de tous les sp. Veuillez suggérer une requête en supposant que le nom de la table est «x» et que la firebase database est sql server 2005.

SELECT Name FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%' 

BTW – voici une ressource pratique pour ce type de question: http://msdn.microsoft.com/en-us/library/ms345522%28v=SQL.90%29.aspx

Les travaux suivants sur SQL2008 et au-dessus. Fournit une liste des procédures et fonctions stockées.

 select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc from sys.objects o inner join sys.sql_expression_dependencies sd on o.object_id = sd.referenced_id inner join sys.objects sp on sd.referencing_id = sp.object_id and sp.type in ('P', 'FN') where o.name = 'YourTableName' order by sp.Name 

Une méthode sans requête consisterait à utiliser Sql Server Management Studio.

Localisez la table, cliquez avec le bouton droit et choisissez “Afficher les dépendances”.

MODIFIER

Mais, comme l’ont dit les commentateurs, ce n’est pas très fiable.

Parfois, les requêtes ci-dessus ne donneront pas de résultat correct, il existe une procédure stockée intégrée pour obtenir les dépendances de la table comme suit:

 EXEC sp_depends @objname = N'TableName'; 
 SELECT o.name FROM sys.sql_modules sm INNER JOIN sys.objects o ON o.object_id = sm.object_id WHERE sm.definition LIKE '%%'

Gardez à l’esprit que cela activera également les SP où le nom de la table est dans les commentaires ou où le nom de la table est une sous-chaîne d’un autre nom de table utilisé. Par exemple, si vous avez des tables nommées “test” et “test_2” et que vous essayez de rechercher des SP avec “test”, vous obtiendrez des résultats pour les deux.

La requête suivante va chercher tous les noms de procédure stockée et la définition correspondante de ces SP

 select so.name, text from sysobjects so, syscomments sc where so.id = sc.id and UPPER(text) like '%%'

La requête ci-dessous ne fonctionne que lors de la recherche de dépendances sur une table et non sur celles d’une colonne:

 EXEC sp_depends @objname = N'TableName'; 

Cependant, la requête suivante est la meilleure option si vous souhaitez rechercher toutes sortes de dépendances, cela ne manque rien. Il donne en fait plus d’informations que nécessaire.

  select distinct so.name --, text from sysobjects so, syscomments sc where so.id = sc.id and lower(text) like '%organizationtypeid%' order by so.name 
 SELECT DISTINCT OBJECT_NAME(OBJECT_ID), object_definition(OBJECT_ID) FROM sys.Procedures WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%' GO 

Cela fonctionnera si vous devez mentionner le nom de la table.

Dans le studio de gestion, vous pouvez simplement faire un clic droit sur la table et cliquer sur “Afficher les dépendances” entrer la description de l'image ici

que vous pouvez voir une liste d’objects qui ont des dépendances avec votre table: entrer la description de l'image ici