2009-03-26 11 views
5

Im travaillant sur cette grande base de données qui a beaucoup de connaissances en affaires intégrées dans les SP [je sais!] Et il y a beaucoup de chaînage entre les SP. par exemple, un proc mémorisé en appelant un autre.Comment trouver la liste des procédures stockées qui affectent une colonne particulière?

Je veux trouver une liste de procédures stockées qui mettent à jour une colonne particulière. Comment ferais-je cela? L'utilisation de showplan_All comme indiqué dans SQL Table and column Parser for stored procedures ne fonctionne pas pour moi, car il s'agit d'un db de développement partagé.

L'utilisation d'un texte de système de balayage Sp de master db comme décrit n'est pas faisable parce que je n'ai pas accès à la base de données maître.

Alors, comment puis-je trouver cette information?

+0

double possible de [Trouver toutes les procédures stockées qui font référence à une colonne spécifique dans une table de] (https://stackoverflow.com/questions/19539696/find-all-stored-procedures-that-reference -a-specific-column-in-some-table) – Matt

Répondre

9

Avez-vous essayé ceci: EXEC sp_depends @objname = [table name of the column you are interested in]. Ainsi, par exemple, si vous avez une colonne nommée Price dans une table nommée Product, vous devez exécuter ceci: EXEC sp_depends @objname = N'Product'. Simplement l'exécution de ceci vous donnerait la liste de tous les sps, vues, etc. qui dépendent de cette table particulière.

J'utilise tout le temps que je travaille avec un db qui a plus de 400 tables :-)

sp_depends page on MSDN

8

Essayez quelque chose comme ceci:

use YourDatabase; 

select [Name]  
from sys.procedures 
where object_definition([object_id]) like '%YourColumnName%'; 

Évidemment, cela a le potentiel de générer beaucoup de faux positifs en fonction de ce que la colonne est nommée, mais au moins vous aurez une liste de procédures à éplucher.

1

Voici un qui fonctionne dans SQL 2000+; Notez que comme Andrew a noté dans son, vous obtiendrez des faux positifs en fonction de votre nom de la colonne, mais il est un lieu de départ:

SELECT DISTINCT o.Name 
FROM syscomments c 
    JOIN sysobjects o ON c.ID = o.ID 
WHERE c.Text LIKE '%ColumnName%' 
ORDER BY o.Name 
10

Du point de vue du système de sys.sql_dependencies vous pouvez obtenir des dépendances au niveau de la colonne.

DECLARE @Schema SYSNAME 
DECLARE @Table SYSNAME 
DECLARE @Column SYSNAME 

SET @Schema = 'dbo' 
SET @Table = 'TableName' 
SET @Column = 'ColumnName' 

SELECT o.name 
FROM sys.sql_dependencies AS d 
    INNER JOIN sys.all_objects AS o ON o.object_id = d.object_id 
    INNER JOIN sys.all_objects AS ro ON ro.object_id = d.referenced_major_id 
    INNER JOIN sys.all_columns AS c ON c.object_id = ro.object_id AND c.column_id = d.referenced_minor_id 
WHERE (SCHEMA_NAME(ro.schema_id)[email protected]) 
    and o.type_desc = 'SQL_STORED_PROCEDURE' 
    and ro.name = @Table 
    and c.name = @Column 
GROUP BY o.name 
0
use msdb 
go 
select * from sysjobs j 
inner join sysjobsteps s 
on j.job_id=s.job_id 
where command like '%HBR_INSTRUMENT%' 
Questions connexes