【问题标题】:Search Stored Procedures, Functions & Triggers for Keyword搜索关键字的存储过程、函数和触发器
【发布时间】:2011-10-07 19:11:58
【问题描述】:

我收到了错误:

Invalid column name 'Reserved'

我不确定这是在我的数据库代码中的什么位置,并且有 100 多个存储过程、函数和触发器,我必须手动查看这些以找到对未知列的引用。

有没有办法快速搜索哪些对象包含这个关键字?

【问题讨论】:

    标签: sql-server-2008 search stored-procedures triggers user-defined-functions


    【解决方案1】:

    试试这个:

    SELECT o.name, t.TABLE_NAME, c.text 
      FROM syscomments c 
      JOIN sysobjects o 
        ON c.id = o.id
      JOIN INFORMATION_SCHEMA.Tables t
        ON  c.text LIKE '%reserved%' 
    

    或者,如果您要查找包含名为 Reserved 的列的表,您可以这样做:

    select o.name 
    from sys.objects o 
    inner join sys.columns c 
    on o.object_id = c.object_id
    where o.type = 'u' and c.name = 'Reserved'
    

    如果您想过滤特定类型的对象(例如过程、视图或表)的搜索,您可以添加“p”表示存储过程,“v”表示视图,“u”表示用户定义的表,' tr' 用于触发器,例如:

    AND o.type = 'p'
    

    【讨论】:

    • 适用于 views, stored procedures, user defined tables, triggers 以及 函数、约束、规则、默认值 ?
    • 如何过滤列名,如 [NumeroTotal] 例如:([NumeroUsadas]<=[NumeroTotal] AND [NumeroTotal]>=(0))。对我来说,这 c.text LIKE '%[NumeroTotal]%' 不起作用,'%[[NumeroTotal]]%' 也不起作用
    • JOIN INFORMATION_SCHEMA.Tables t 没有 on t.xxx = c.yyy ?只有ON c.text?恕我直言更好:SELECT o.name, o.type, o.xtype, c.text , USER_NAME(o.uid) + '.' + OBJECT_NAME(c.id) AS 'Object name' FROM syscomments c JOIN sysobjects o ON c.id = o.id where c.text LIKE '%NumeroTotal%' or c.text LIKE '%NumeroUsadas%'
    • 请注意,syscmets 表将值存储在 8000 个字符的块中,因此,如果您不幸将要搜索的文本拆分到这些边界之一,您通过stackoverflow.com/a/4222372/206730 使用此方法找不到它
    【解决方案2】:

    使用RedGate's SQL Search 扩展可能也能提供帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 2011-06-28
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多