Как найти список хранимых процедур, которые влияют на определенный столбец? - PullRequest
8 голосов
/ 26 марта 2009

Я работаю над этой большой БД, в которой есть много бизнес-знаний, встроенных в SP [я знаю!], И между ними много цепочек. т.е. один сохраненный процесс вызывает другой.

Я хочу узнать список хранимых процедур, которые обновляют определенный столбец. Как бы я это сделал.

Использование showplan_All, как описано в Анализатор таблиц и столбцов SQL для хранимых процедур у меня не работает, потому что это общая база данных разработчика.

использование системного текста Sp из главной базы данных сканирования, как описано, невозможно, поскольку у меня нет доступа к главной базе данных.

Так, как я могу найти эту информацию?

Ответы [ 5 ]

11 голосов
/ 26 марта 2009

Вы пробовали это: EXEC sp_depends @objname = [table name of the column you are interested in].

Так, например, если у вас есть столбец с именем Price в таблице с именем Product, вы должны выполнить это: EXEC sp_depends @objname = N'Product'.

Простое выполнение даст вам список всех sps, представлений и т. Д., Которые зависят от этой конкретной таблицы.

Я использую это все время, так как работаю с БД, которая имеет более 400 таблиц: -)

sp_depends page на MSDN

10 голосов
/ 06 января 2012

Из системного представления sys.sql_dependencies вы можете получить зависимости на уровне столбца.

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)=@Schema) 
  and o.type_desc = 'SQL_STORED_PROCEDURE'
  and ro.name = @Table
  and c.name = @Column
GROUP BY o.name
8 голосов
/ 26 марта 2009

Попробуйте что-то вроде этого:

use YourDatabase;

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

Очевидно, что это может привести к большому количеству ложных срабатываний в зависимости от того, как назван столбец, но, по крайней мере, у вас будет список процедур, которые необходимо просмотреть.

1 голос
/ 26 марта 2009

Вот тот, который работает в SQL 2000+; Обратите внимание, что, как заметил Эндрю в своей книге, вы получите ложные срабатывания в зависимости от названия столбца, но это отправная точка:

SELECT DISTINCT o.Name
FROM syscomments c
    JOIN sysobjects o ON c.ID = o.ID
WHERE c.Text LIKE '%ColumnName%'
ORDER BY o.Name
0 голосов
/ 06 декабря 2012
use msdb
go
select * from sysjobs j
inner join sysjobsteps s
on j.job_id=s.job_id
where command like '%HBR_INSTRUMENT%'
...