web-dev-qa-db-fra.com

Comment identifier toutes les procédures stockées faisant référence à une table particulière

J'ai créé un tableau sur l'environnement de développement à des fins de test et peu de sprays ont été référencés dans ce tableau. Maintenant, je dois supprimer ce tableau et identifier tous les sp qui font référence à ce tableau. 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 base de données est SQL Server 2005.

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

BTW - Voici une ressource pratique pour ce type de question: Interrogation du catalogue système SQL Server FAQ

187
Chains

Ce qui suit fonctionne sur SQL2008 et supérieur. Fournit une liste des procédures stockées et des fonctions.

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
24
Guy Hollington

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

Localisez la table, faites un clic droit et choisissez "Afficher les dépendances".

MODIFIER

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

15
Hans Kesting

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

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

Gardez simplement à l'esprit que cela affichera également les SP dont le nom de la table est indiqué dans les commentaires ou dont le nom 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.

5
Tom H

La requête suivante va extraire 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 '%<TABLE NAME>%'
5
Deepak Kothari

La requête ci-dessous fonctionne uniquement lors de la recherche de dépendances sur une table et non de celles sur 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, elle ne manque rien. Il donne en réalité 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
5
Siraj Ansari
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.

2
ric

Dans le studio de gestion, vous pouvez cliquer avec le bouton droit de la souris sur le tableau et cliquer sur "Afficher les dépendances"  enter image description here

que vous pouvez voir une liste d'objets qui ont des dépendances avec votre table:  enter image description here

0
nzrytmn

Essaye ça 

   SELECT DISTINCT so.name
    FROM syscomments sc
    INNER JOIN sysobjects so ON sc.id=so.id
    WHERE sc.TEXT LIKE '%your table name%'
0
Pooja Chavan