SQL Server 2000:列出和禁用所有触发器

flu*_*luf 6 sql-server-2000

我必须在 sql server 2000 环境中对我们的一个数据库进行数据库清理。清理主要包括禁用所有触发器、删除所有旧数据、启用触发器和收缩事务日志。

目前我遇到的最大问题是禁用触发器。这在 sql 2005 / 2008 中会非常容易,因为它们包含“禁用所有触发器”命令。我有一个查询来列出所有触发器,尽管它没有列出触发器的状态(这将是一个奖励)

SELECT S2.[name] TableName, S1.[name] TriggerName, CASE WHEN S2.deltrig = s1.id THEN 'Delete' WHEN S2.instrig = s1.id THEN 'Insert' WHEN S2.updtrig = s1.id THEN 'Update' END 'TriggerType' , 'S1',s1.*,'S2',s2.* FROM sysobjects S1 JOIN sysobjects S2 ON S1.parent_obj = S2.[id] WHERE S1.xtype='TR'
Run Code Online (Sandbox Code Playgroud)

来源

对于每个表,记录的删除将是一个简单的删除,这可能不是最有效的方法,而是规定的方法。

Shrinking the Transaction Log 也是排序的,我在 Microsoft 支持站点上找到了一篇关于使用 DBCC 的文章

任何建议将不胜感激

gbn*_*gbn 6

SQL Server 2000中具有ALTER TABLE FOO启用触发器ALL

并生成所需的 ALTER TABLE 脚本使用这个

SELECT
    DISTINCT 'ALTER TABLE ' + OBJECT_NAME(parent_obj) + ' /*DISABLE*/ ENABLE TRIGGER ALL'
FROM
    sysobjects
WHERE
    xtype = 'TR'
Run Code Online (Sandbox Code Playgroud)

我个人不会打扰测试触发器的状态。恕我直言,禁用的触发器不应该存在。尤其是因为OBJECTPROPERTY在 SQL Server 2000 中不支持它

编辑:

我的错误,SQL Server 2000 中的 OBJECTPROPERTY 根据评论具有 ExecIsTriggerDisabled。所以你可以跟踪之前和之后的状态