当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《如何查找影响特定列的存储过程列表?》经验,为你挑选了3个好方法。

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

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

使用SQL表中列出的showplan_All 和存储过程的Parser列对我来说不起作用,因为这是一个共享的dev db.

如上所述使用来自主数据库扫描系统文本的Sp是不可行的,因为我无法访问主数据库.

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



1> Raj..:

你试过这个: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页面



2> StanislawSwi..:

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



3> Andrew Hare..:

尝试这样的事情:

use YourDatabase;

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

显然,这有可能产生大量误报,具体取决于列的名称,但至少你会有一个筛选程序列表.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有