【问题标题】:How do you identify the triggers associated with a table in a sybase database?如何识别与 sybase 数据库中的表关联的触发器?
【发布时间】:2010-09-24 00:41:41
【问题描述】:

我正在使用 SQL Advantage 并且需要知道 SQL 是什么来识别与表关联的触发器。我没有使用其他工具的选项,所以老式的 SQL 解决方案是理想的答案。

【问题讨论】:

    标签: sql triggers sybase


    【解决方案1】:

    我也发现了

    sp_depends <object_name> 
    

    将向您显示有关表的大量信息,包括与其关联的所有触发器。使用它以及 Ray 的查询可以更容易地找到触发器。结合 Ray 的链接文章中的这个查询:

    sp_helptext <trigger_name>
    

    你可以看到触发器的定义:

    sp_depends <trigger_name>
    

    还将显示与触发器相关的所有表

    【讨论】:

      【解决方案2】:
      选择 *
      来自系统对象
      其中 type = 'TR'

      取自here

      【讨论】:

      • 谢谢雷,我昨天一直在搜索,但没有找到那篇文章。它有大量有用的信息。
      • 我会在您的答案中添加我的答案说明,但我无法编辑答案。我想是因为我在创建问题时没有检查社区 wiki。
      【解决方案3】:

      显示触发器并为表创建 sql:

      select so.name, text
      from sysobjects so, syscomments sc
      where type = 'TR'
      and so.id = sc.id
      and text like '%TABLENAME%'
      

      【讨论】:

        【解决方案4】:
        SELECT 
            T.name AS TableName
            ,O.name  TriggerName  
            FROM sysobjects O 
            INNER JOIN sys.tables T ON T.object_id = O.parent_obj
            WHERE O.type = 'TR' AND T.name IN ('tableNames')
        ORDER BY TableName
        

        【讨论】:

          【解决方案5】:

          我相信存在(或至少“曾经”)依赖信息并不总是准确的问题。因此,我会尝试这样处理它:

          select name
          from sysobjects
          where xtype='TR'
          and id in (select id from syscomments where text like '%MY-TABLE-NAME%')
          

          祝你好运。

          PS-这是未经测试的代码,如果不起作用,请发表评论,我会修复它。

          【讨论】:

            【解决方案6】:
            1. 打开 Sybase Central 并导航到触发器视图。
            2. 单击“对象名称”列进行排序。

            “对象名称”列显然显示了与触发器关联的表。向下滚动到您感兴趣的表格。

            【讨论】:

              【解决方案7】:

              我将使用以下代码来确保您获得正确的对象。从 Sybase 16 开始,这将不再完整,因为一张表上可能有更多相同类型的触发器。

                  select tr.id, tr.name, tr.type, tr.crdate, tr.loginame
              from sysobjects u
                join sysobjects tr on tr.id in (u.instrig, u.deltrig, u.updtrig, u.seltrig)
              where u.name = 'TABLENAME'
              

              【讨论】:

                【解决方案8】:

                我使用的是 SQL Anywhere 16,很容易找到特定表的触发器。打开表格时,有一个名为“触发器”的选项卡。但是查找所有触发器的查询与上面的答案有点不同:

                select * from SYS.SYSTRIGGERS --where trigdefn like '%exec%'
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2020-03-06
                  • 2014-10-01
                  • 2019-02-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-12-09
                  • 1970-01-01
                  相关资源
                  最近更新 更多