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