Sql 如何识别与sybase数据库中的表关联的触发器?

Sql 如何识别与sybase数据库中的表关联的触发器?,sql,triggers,sybase,Sql,Triggers,Sybase,我正在使用SQL Advantage,需要知道什么是SQL来识别与表关联的触发器。我没有选择使用其他工具,因此老式的SQL解决方案是理想的解决方案。select* select * from sysobjects where type = 'TR' 来自sysobjects 其中type='TR' 摘自。我还发现 sp_depends <object_name> sp_取决于 将向您显示有关表的大量信息,包括与之关联的所有触发器。使用它,再加上Ray的查询,可以更容易地找到触发

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

select* select * from sysobjects where type = 'TR' 来自sysobjects 其中type='TR' 摘自。

我还发现

sp_depends <object_name> 
sp_取决于
将向您显示有关表的大量信息,包括与之关联的所有触发器。使用它,再加上Ray的查询,可以更容易地找到触发器。结合Ray链接文章中的此查询:

sp_helptext <trigger_name>
sp\u帮助文本
您可以看到触发器的定义:

sp_depends <trigger_name>
sp_取决于
还将向您显示与触发器相关的所有表

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

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


PS这是未经测试的代码,如果不起作用,请留下注释,我会修复它。

要显示触发器并为表创建sql,请执行以下操作:

select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%TABLENAME%'
  • 打开Sybase Central并导航到触发器视图
  • 单击“对象名称”列进行排序
    “Object Name”列显然显示了与触发器关联的表。向下滚动到您感兴趣的表。

    我将使用以下代码,以确保您获得正确的对象。由于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'
    

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

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

    谢谢你,雷,我昨天找了很久,但没找到那篇文章。这里面有大量有用的信息。我本想在你的答案中添加我的答案澄清,但我无法编辑答案。我想是因为我在创建问题时没有检查社区维基。
    select * from SYS.SYSTRIGGERS --where trigdefn like '%exec%'