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

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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】:
    打开 Sybase Central 并导航到触发器视图。 单击“对象名称”列进行排序。

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

【讨论】:

【参考方案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%'

【讨论】:

以上是关于如何识别与 sybase 数据库中的表关联的触发器?的主要内容,如果未能解决你的问题,请参考以下文章

一个关于SyBase 数据库 Insert 触发器的问题

Sybase ASE 15.7 中的审计表触发器

怎样导出sybase数据库的所有库结构和表结构的建库的sql语句

如何查看 Sybase 中的列元数据?

在sybase中怎样用output命令把表中的数据导出来?

如何在 SAP ASE Sybase 16 中从具有外键的表中删除行