【问题标题】:Find list of procedures using a specific column使用特定列查找过程列表
【发布时间】:2012-08-13 17:43:08
【问题描述】:

如果我提供列名作为存储过程的输入,我应该从所有数据库中获取使用该列的过程和表名列表吗?

【问题讨论】:

  • 请指定 SQL Server 的版本。当我们知道我们在谈论什么时,解决问题会容易得多,特别是因为元数据和依赖关系在版本之间发生了很大变化。
  • 我已重新标记。以后请添加特定于版本的标签,谢谢。

标签: sql-server sql-server-2008


【解决方案1】:

对于 sql-server 2005+,您可以使用:

create procedure sp1
    @columnName varchar(30)
as
    select s1.name,'table' type
    from sys.objects s1 join sys.columns s2 on s1.object_id = s2.object_id
    where s2.name = @columnName  and s1.type = 'U'

    union

    select s1.name,'procedure' type
    from sys.procedures s1 join sys.sql_modules s2 on s1.object_id = s2.object_id
    and s2.definition like '%'+@columnName+'%'

【讨论】:

  • 系统集?啊。试试 sys.sql_modules,如果过程大于 4K,至少定义都在一行中。无论如何,syscmets 都是为了向后兼容(由于您使用的系统视图,您的答案在 2000 年将不起作用)。
  • 感谢您的评论,我已经解决了。
猜你喜欢
  • 2010-10-15
  • 1970-01-01
  • 2015-04-12
  • 2014-09-10
  • 1970-01-01
  • 2017-05-10
  • 2012-02-20
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多