Sql-Server-2000

SQL Server 2000:列出並禁用所有觸發器

  • August 16, 2011

我必須在 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'

資源

刪除記錄將是每個表的簡單刪除,這可能不是最有效的方法,但它是規定的方法。

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

任何建議將不勝感激

SQL Server 2000 也有ALTER TABLE foo ENABLE TRIGGER ALL

並生成所需的 ALTER TABLE 腳本使用這個

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

我個人不會打擾測試觸發器的狀態。恕我直言,禁用的觸發器不應該存在。尤其是因為OBJECTPROPERTY在 SQL Server 2000 中不支持它

編輯:

我的錯誤,SQL Server 2000 中的 OBJECTPROPERTY 根據評論具有 ExecIsTriggerDisabled。這樣您就可以跟踪之前和之後的狀態

引用自:https://dba.stackexchange.com/questions/1006