我的应用程序基于 sql server db。
除定制外,所有客户都具有相同的数据库。
一些自定义包括:新表、修改表、自定义 View 、自定义触发器...
当我运行软件更新时,会执行一些脚本。现在我手动禁用触发器并在脚本完成后重新启用。
无论如何,我想自动禁用所有触发器(已启用,可能其中一些可能已经被禁用),然后在最后重新启用它们。
不重新发明轮子,如何做到这一点?
如何仅获取当前数据库上的事件触发器?
一旦我得到这个,我就可以以编程方式创建和运行
DISABLE TRIGGER triggername ON TABLENAME
ENABLE TRIGGER triggername ON TABLENAME
最佳答案
select objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled')
1 表示真,0 明显表示假
使用 Jeff O 的查询并稍微修改一下
SELECT
TAB.name as Table_Name
, TRIG.name as Trigger_Name
, TRIG.is_disabled --or objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled')
FROM [sys].[triggers] as TRIG
inner join sys.tables as TAB
on TRIG.parent_id = TAB.object_id
或将其添加为 where 子句。
where TRIG.is_disabled = 0 -- or 1 depends on what you want
关于sql-server - 如何获取数据库上的事件触发器列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9634281/