2009-03-26 5 views
5

Pracuję nad tym dużym DB, który ma dużo wiedzy biznesowej osadzonej w SP [wiem!] I istnieje wiele łańcuchów między SP. tj. jeden zapisany proces wywołujący inny.Jak znaleźć listę procedur składowanych, które mają wpływ na daną kolumnę?

Chcę uzyskać listę procedur przechowywanych, które aktualizują konkretną kolumnę. Jak to zrobię.

Korzystanie z showplan_All jak opisano w SQL Table and column Parser for stored procedures nie działa dla mnie, ponieważ jest to udostępniona db db.

używanie Sp z głównego tekstu systemu skanowania db jak opisano nie jest wykonalne, ponieważ nie mam dostępu do głównej bazy danych.

Jak mogę znaleźć te informacje?

+0

Możliwe duplikat [Find procedur przechowywanych, które odnoszą się do konkretnej kolumny w pewnym tabeli] (https://stackoverflow.com/questions/19539696/find-all-stored-procedures-that-reference -a-specific-column-in-some-table) – Matt

Odpowiedz

9

Próbowałeś tego: EXEC sp_depends @objname = [table name of the column you are interested in].

Na przykład, jeśli masz kolumnę o nazwie Price w tabeli o nazwie Product, możesz wykonać to: EXEC sp_depends @objname = N'Product'.

Po prostu wykonując to, otrzymasz listę wszystkich sps, widoków itp., Które zależą od tej konkretnej tabeli.

używam tego cały czas, jak pracować z db, który ma ponad 400 tabel :-)

sp_depends page on MSDN

8

spróbować czegoś takiego:

use YourDatabase; 

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

Oczywiście to ma potencjał do generowania dużo fałszywych alarmów w zależności od tego, co nazywa się kolumna, ale przynajmniej będziesz miał listę procedur przesiać przez.

1

Oto jeden, który działa w SQL 2000+; Zauważ, że jak Andrew zauważyć w jego, otrzymasz fałszywych alarmów w zależności od nazwy kolumny, ale to miejsce startu:

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

z pola widzenia systemu sys.sql_dependencies można uzyskać zależności na poziomie kolumny.

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%' 
Powiązane problemy