我正在研究这个大型数据库,它具有很多嵌入SP的业务知识[我知道!]并且SP之间有很多链接。即一个存储过程调用另一个。
我想找出更新特定列的存储过程列表。我该怎么做。
使用showplan_All,如中所述 SQL Table and column Parser for stored procedures对我不起作用,因为这是一个共享的dev db。
使用主数据库扫描系统文本中的Sp是不可行的,因为我无法访问主数据库。
那我怎么能找到这个信息?
答案 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多个表的数据库: - )
答案 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%'