Sql-Server

如何刪除單個數據庫中的所有觸發器?

  • December 2, 2020

我有一個包含 104 個觸發器的數據庫,有沒有辦法用一個命令從一個名為“system_db_audits”的數據庫中刪除所有觸發器?

您可以使用動態 SQL 和sys.triggersDMV 來建構您可以執行的查詢。

is_ms_shipped不包括 SQL Server 附帶的任何觸發器。

parent_class_desc過濾對象級別的觸發器,而不是數據庫級別。

一旦您對輸出感到滿意,請將其更改為PRINTEXEC

USE system_db_audits;
GO

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += 
   N'DROP TRIGGER ' + 
   QUOTENAME(OBJECT_SCHEMA_NAME(t.object_id)) + N'.' + 
   QUOTENAME(t.name) + N'; ' + NCHAR(13)
FROM sys.triggers AS t
WHERE t.is_ms_shipped = 0
 AND t.parent_class_desc = N'OBJECT_OR_COLUMN';

PRINT @sql;

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