如何在Sybase ASE 16.0中查找触发器状态(已启用或已取消激活)?

时间:2017-07-21 08:27:22

标签: database triggers sybase sybase-ase

我有一个表,在不同的模式中定义了多个触发器。我想知道每个触发器的启用状态。例如,我在s1中创建了一个表,并在s1和s2中创建了两个具有相同名称的触发器。

Create table s1.sometable (---);

create trigger s1.xyz on s1.sometable as -- trigger body--;

create trigger s2.xyz on s1.sometable as -- trigger body--;

alter table s1.sometable disable trigger s2.xyz ;

使用sp_helptrigger在这里没有帮助,因为它没有给出两个模式中的模式和触发器具有相同的名称。有没有办法在给定模式和名称的情况下找到触发器的状态?

1 个答案:

答案 0 :(得分:1)

正如我在回答您关于How to find triggers along with schemas in ASE 16.0的其他问题时提到的那样,请查看 sp_helptrigger 的源代码。

sp_helptrigger 的源代码中我们可以看到:

-- status for sysobjects.instrig
sysobjects.systat2 & 1048576 != 0 => disabled
sysobjects.systat2 & 1048576  = 0 => enabled

-- status for sysobjects.deltrig
sysobjects.systat2 & 2097152 != 0 => disabled
sysobjects.systat2 & 2097152  = 0 => enabled

-- status for sysobjects.updtrig
sysobjects.systat2 & 4194304 != 0 => disabled
sysobjects.systat2 & 4194304  = 0 => enabled

-- status for triggers stored in syscontraints
syscontraints.status &  4096 != 0 => disabled
syscontraints.status &  4096  = 0 => enabled