如何查找影响特定列的存储过程列表?

时间:2009-03-26 15:21:31

标签: sql sql-server sql-server-2005 stored-procedures

我正在研究这个大型数据库,它具有很多嵌入SP的业务知识[我知道!]并且SP之间有很多链接。即一个存储过程调用另一个。

我想找出更新特定列的存储过程列表。我该怎么做。

使用showplan_All,如中所述 SQL Table and column Parser for stored procedures对我不起作用,因为这是一个共享的dev db。

使用主数据库扫描系统文本中的Sp是不可行的,因为我无法访问主数据库。

那我怎么能找到这个信息?

5 个答案:

答案 0 :(得分:11)

你试过这个: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 on MSDN

答案 1 :(得分:10)

从系统视图 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

答案 2 :(得分:8)

尝试这样的事情:

use YourDatabase;

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

显然,根据列的命名,这有可能产生大量的误报,但至少你会有一个筛选程序列表。

答案 3 :(得分:1)

这是一个适用于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

答案 4 :(得分:0)

use msdb
go
select * from sysjobs j
inner join sysjobsteps s
on j.job_id=s.job_id
where command like '%HBR_INSTRUMENT%'