【问题标题】:Sybase: get list of stored procedures using a particular tableSybase:获取使用特定表的存储过程列表
【发布时间】:2011-03-10 02:06:08
【问题描述】:

我在 Sybase 数据库中有 500 个存储过程。使用 SQL,我可以获得使用特定表的所有存储过程的列表,例如 tbl_books

【问题讨论】:

    标签: stored-procedures sybase


    【解决方案1】:

    使用这样的东西:

    Select distinct sysobjects.name
    , case 
     when sysobjects.type = 'TR' then 'TRIGGER' 
     when sysobjects.type = 'P' then 'PROCEDURE' 
     when sysobjects.type = 'V' then 'VIEW' 
     else 'UNKNOWN' end type
    from sysobjects inner join syscomments
    on sysobjects.id = syscomments.id
    where syscomments.text like '%tbl_books%'
    

    【讨论】:

      【解决方案2】:

      最初我会尝试sp_depends

      Syntax: sp_depends objname[, column_name]
      

      对于objname,您可以提供任何对象名称,例如表、视图或存储过程。

      【讨论】:

      • 问题是相反的。他需要一个与sp_depends相反的功能。
      • @mtk。来自帮助:“显示有关数据库对象依赖关系的信息——视图、触发器和过程——在数据库中依赖于指定的表或视图”infocenter.sybase.com/help/index.jsp?topic=/…
      • 对不起我的错误。需要完整阅读文档:)
      【解决方案3】:

      如果有另一个表名说,像这样使用 syscmets 将停止工作 tbl_books_new。更好的方法是使用 sysdepends

      select so1.name from
      sysobjects so1, sysobjects so2, sysdepends sd
      where so1.id = sd.id
      and   so2.id = sd.depid
      and   so2.name = 'tbl_books'
      and   so1.type = 'P'
      

      【讨论】:

        【解决方案4】:

        这样的事情怎么样:

        select proc_name from sysprocedures where proc_defn like "%tbl_books%"
        

        【讨论】:

        • 对不起,我在表 sysprocedures 中看不到库 proc_name 和 proc_defn;; select top 5 * from sysprocedures type id sequence status number version ----------- ----------- ----------- ----- ------ ----------- ------------ 2 3031 0 1026 0 12500 2 3031 1 1026 0 12500 2 3031 2 1026 0 12500 2 3031 3 1026 0 12500 2 3031 4 1026 0 12500
        【解决方案5】:

        请记住,syscmets 中的文本列是 varchar(255),因此一个大程序可以由 syscmets 中的多行组成,因此,如果您正在搜索的表名,上述选择将找不到程序名,已在 syscmets 中拆分为 2 个文本行。

        我建议使用以下选择,它将处理上述情况:

        declare @text varchar(100)
        select @text        = "%tbl_books%"
        
        select distinct o.name object
        from sysobjects o,
            syscomments c
        where o.id=c.id
        and o.type='P'
        and (c.text like @text
        or  exists(
            select 1 from syscomments c2 
                where c.id=c2.id 
                and c.colid+1=c2.colid 
                and right(c.text,100)+ substring(c2.text, 1, 100) like @text 
            )
        )
        order by 1
        

        -- 感谢ASEisql的创建者

        【讨论】:

        • 是的..每当我想要一些 DB qeuries 我太信任 ASEisql 工具。它真的很棒的工具:)
        猜你喜欢
        • 2015-09-18
        • 2020-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-21
        • 2011-05-28
        • 1970-01-01
        相关资源
        最近更新 更多