我正在研究这个大型数据库,它具有很多嵌入在SP中的商业知识[我知道!]并且SP之间存在很多链接.即一个存储过程调用另一个.
我想找出更新特定列的存储过程列表.我该怎么做
使用SQL表中列出的showplan_All 和存储过程的Parser列对我来说不起作用,因为这是一个共享的dev db.
如上所述使用来自主数据库扫描系统文本的Sp是不可行的,因为我无法访问主数据库.
那我怎么能找到这个信息呢?
你试过这个:EXEC sp_depends @objname = [table name of the column you are interested in]
.
因此,例如,如果您在名为Price
的表中命名了一列,则Product
执行以下操作:EXEC sp_depends @objname = N'Product'
.
简单地执行此操作将为您提供依赖于该特定表的所有sps,视图等的列表.
我一直使用这个,因为我使用的数据库有超过400个表:-)
MSDN上的sp_depends页面
从系统视图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
尝试这样的事情:
use YourDatabase; select [Name] from sys.procedures where object_definition([object_id]) like '%YourColumnName%';
显然,这有可能产生大量误报,具体取决于列的名称,但至少你会有一个筛选程序列表.