2009-03-26 2 views
5

Ich arbeite an dieser großen Datenbank, die viel Geschäftswissen in die SPs integriert hat [ich weiß!] Und es gibt viele Verkettungen zwischen den SPs. d. h. ein gespeicherter Prozess ruft einen anderen an.Wie finde ich die Liste der Stored Procedures, die eine bestimmte Spalte betreffen?

Ich möchte eine Liste der gespeicherten Prozeduren herausfinden, die eine bestimmte Spalte aktualisieren. Wie würde ich das tun?

Mit showplan_All wie in SQL Table and column Parser for stored procedures beschrieben funktioniert nicht für mich, weil dies eine gemeinsame Dev db ist.

mit einem Sp von Master Db Scansystem Text wie beschrieben ist nicht möglich, weil ich keinen Zugriff auf die Master-db.

Wie kann ich diese Informationen finden?

+0

Mögliches Duplikat [Suche alle gespeicherten Prozeduren, die eine bestimmte Spalte in irgendeiner Tabelle verweisen] (https://stackoverflow.com/questions/19539696/find-all-stored-procedures-that-reference -a-spezifische-Spalte-in-irgendeiner-Tabelle – Matt

Antwort

9

Haben Sie versucht: EXEC sp_depends @objname = [table name of the column you are interested in].

Wenn Sie zum Beispiel eine Spalte mit dem Namen Price in einer Tabelle namens Product hätten, würden Sie dies ausführen: EXEC sp_depends @objname = N'Product'.

Wenn Sie dies ausführen, erhalten Sie eine Liste aller SPs, Ansichten usw., die von dieser bestimmten Tabelle abhängen.

Ich benutze diese die ganze Zeit, wie ich mit einem db arbeiten, die mehr als 400 Tabellen hat :-)

sp_depends page on MSDN

8

versuchen, etwas wie folgt aus:

use YourDatabase; 

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

Offensichtlich hat dies das Potenzial viele Fehlalarme zu erzeugen, je nachdem, was der Spalte genannt wird, aber zumindest werden Sie eine Liste von Prozeduren haben zu sichten.

1

Hier ist eine, die in SQL 2000+ funktioniert; Beachten Sie, dass als Andrew in seinem erwähnt, Sie Fehlalarme je nach Spaltennamen bekommen, aber es ist ein Ausgangspunkt:

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

Aus Systemsicht sys.sql_dependencies Sie Abhängigkeiten auf Spaltenebene zu bekommen.

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%' 
Verwandte Themen