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.
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
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
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.
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';
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.
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>%'
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
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.
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%'