【问题标题】:Find a stored procedure name with its content in SQL Server 2000在 SQL Server 2000 中查找存储过程名称及其内容
【发布时间】:2012-12-25 00:24:29
【问题描述】:

对于存储过程,我有它的完整源代码。但是该存储过程的 name 已丢失。在这个数据库中,有数百个存储过程。

那么有没有一种方法可以通过使用存储过程的内容或使用内容中的任何变量来找出存储过程的名称

这让我很困惑。非常感谢您的帮助。

【问题讨论】:

    标签: sql stored-procedures sql-server-2000


    【解决方案1】:

    试试这个:

    select * from sysobjects where id in 
    (select id from syscomments where text like '%exec%')
    order by [name]
    

    其中 'exec' 是您要搜索的文本。此查询也将搜索视图,仅供参考

    【讨论】:

      【解决方案2】:

      如果存储过程的文本没有加密,Sql Server 会将过程的全文保存在syscomments 表中,其中id 字段引用sysobjects 表,其中存储了实际名称.

      所以,从存储过程中找到一些不太可能在其他地方的代表行,然后做:

      select o.name, c.text 
      from syscomments c
         inner join sysobjects o on o.id = c.id
      where c.text like '%<representative_line>%'
        and o.type='P' -- this means filter procedures only
      

      这应该希望只返回一些您可以手动检查的程序。

      【讨论】:

      • 这也不错。但不能选择多个“答案”。 Thnaks :)
      【解决方案3】:

      还有另一种方法,更易读、更容易记住:

      SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
          FROM INFORMATION_SCHEMA.ROUTINES 
          WHERE ROUTINE_DEFINITION LIKE '%AlgunaPalabraQueTeAcuerdes%' 
          AND ROUTINE_TYPE='PROCEDURE'
      

      这至少在 sql 2008 和更新版本中有效。 Fuente

      【讨论】:

        【解决方案4】:

        试试这个查询,它会得到包含给定单词或字段的过程名称

           SELECT Name 
                FROM sys.procedures 
                WHERE OBJECT_DEFINITION(object_id) LIKE '%Any-Field (OR) WORD%'
        

        【讨论】:

        • sys.procedures 在 SQL 2000 上不存在
        • 是的。提到的概率是针对 SQL 2000 的!
        【解决方案5】:
        select object_name(id) from syscomments where text like '%exec%'
        

        【讨论】:

          猜你喜欢
          • 2014-09-01
          • 2011-12-02
          • 1970-01-01
          • 2010-12-24
          • 2011-04-04
          • 1970-01-01
          • 2011-12-19
          • 2013-01-16
          • 1970-01-01
          相关资源
          最近更新 更多