8

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

4

8 回答 8

11
选择 *
来自系统对象
其中类型 = 'TR'

取自这里

于 2008-11-26T06:40:15.767 回答
11

我也发现

sp_depends <object_name> 

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

sp_helptext <trigger_name>

可以看到触发器的定义:

sp_depends <trigger_name>

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

于 2008-11-26T18:10:55.047 回答
5

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

select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%TABLENAME%'
于 2011-01-11T13:28:25.473 回答
3
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
于 2011-12-30T12:13:41.847 回答
1

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

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

祝你好运。

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

于 2008-11-29T07:14:26.887 回答
0
  1. 打开 Sybase Central 并导航到触发器视图。
  2. 单击“对象名称”列进行排序。

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

于 2015-06-19T18:06:43.103 回答
0

我将使用以下代码,以确保您获得正确的对象。从 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'
于 2016-09-30T12:15:30.833 回答
0

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

select * from SYS.SYSTRIGGERS --where trigdefn like '%exec%'
于 2018-09-11T12:21:21.473 回答