求Sybase中查询激活触发器及其关联表的SQL语句
查询Sybase中激活状态的触发器及其关联表
要把触发器和它关联的表对应起来,你可以通过关联sysobjects系统表自身来实现——因为触发器和表的信息都存在这个表里。下面是两种可行的查询语句:
方法一:直接查询所有激活的触发器及对应表
SELECT tr.name AS 触发器名称, tb.name AS 关联表名称, CASE WHEN tr.status & 2 = 0 THEN '激活' ELSE '禁用' END AS 触发器状态 FROM sysobjects tr JOIN sysobjects tb ON tr.parent_obj = tb.id WHERE tr.type = 'TR' AND tr.status & 2 = 0; -- 状态位为2表示触发器被禁用,这里只筛选激活状态的
方法二:从表出发,查询带激活触发器的表及对应触发器
SELECT tr.name AS 触发器名称, tb.name AS 关联表名称, CASE WHEN tb.deltrig = tr.id THEN '删除触发器' WHEN tb.instrig = tr.id THEN '插入触发器' WHEN tb.updtrig = tr.id THEN '更新触发器' END AS 触发器类型, '激活' AS 触发器状态 FROM sysobjects tb JOIN sysobjects tr ON tb.deltrig = tr.id OR tb.instrig = tr.id OR tb.updtrig = tr.id WHERE tb.type = 'U' AND tr.status & 2 = 0;
对你之前SQL的修正说明:
- 语法错误:你连续写了两个
WHERE子句,这是不合法的,必须合并成一个 - 逻辑错误:
deltrig、instrig、updtrig是表的字段,存储的是对应操作的触发器ID,并非触发器自身的字段,不能直接用来过滤触发器
内容的提问来源于stack exchange,提问作者user84
相关产品推荐
相关产品推荐

