如何在 Sybase ASE 16.0 中查找触发器状态(启用或禁用)?
How to find the trigger status (enabled or disbaled) in Sybase ASE 16.0?
我有一个 table,其中包含在不同模式中定义的多个触发器。我想知道每个触发器的启用状态。例如,我在 s1 中创建了一个 table 并在 s1 和 s2 中创建了 2 个具有相同名称的触发器。
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 在这里没有帮助,因为它没有给出模式,并且两个模式中的触发器具有相同的名称。有什么方法可以根据触发器的架构和名称找到触发器的状态?
正如我在回答关于 的其他问题时提到的,请查看 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
我有一个 table,其中包含在不同模式中定义的多个触发器。我想知道每个触发器的启用状态。例如,我在 s1 中创建了一个 table 并在 s1 和 s2 中创建了 2 个具有相同名称的触发器。
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 在这里没有帮助,因为它没有给出模式,并且两个模式中的触发器具有相同的名称。有什么方法可以根据触发器的架构和名称找到触发器的状态?
正如我在回答关于
从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