How to fix Error 4920 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 4920

Why This Error Happens

This error occurs when an ALTER TABLE ... DISABLE/ENABLE TRIGGER or DROP TRIGGER statement references a trigger name that SQL Server cannot locate on the specified table. This typically happens due to a case-sensitivity mismatch in the trigger name, the trigger having already been dropped by another session or script, or the trigger actually existing on a different table than the one referenced in the statement. It can also occur if the trigger was created at the database level (DDL trigger) rather than as a table-level (DML) trigger, causing a scope mismatch.

Step-by-Step Resolution Guide

Step 1: Verify the Trigger Actually Exists on the Target Table

  • Run the following query to list all triggers on the specific table:
  SELECT t.name AS TriggerName, OBJECT_NAME(t.parent_id) AS TableName
  FROM sys.triggers t
  WHERE t.parent_id = OBJECT_ID('YourSchema.YourTableName');
  • Confirm the exact spelling, casing, and schema prefix of the trigger name returned.
  • Check if the trigger is disabled (is_disabled = 1) rather than missing entirely.

Step 2: Check for Scope Mismatch (DML vs. DDL Triggers)

  • Query sys.triggers with parent_class_desc to confirm if the trigger is OBJECT_OR_COLUMN (table-level) or DATABASE (DDL-level):
  SELECT name, parent_class_desc, is_disabled
  FROM sys.triggers
  WHERE name = 'YourTriggerName';
  • If it returns DATABASE_DDL_TRIGGER, you cannot alter it using ALTER TABLE; use ENABLE/DISABLE TRIGGER ... ON DATABASE instead.
  • Update your script to reference the correct command scope.

Step 3: Correct the Table and Schema Reference

  • Ensure the ALTER TABLE statement explicitly includes the correct schema (e.g., dbo.Orders instead of just Orders).
  • Re-run the corrected syntax:
  ALTER TABLE dbo.YourTableName ENABLE TRIGGER YourTriggerName;
  • If working in SSMS 21 (compatible with SQL Server 2025), refresh the Object Explorer (F5) to clear any cached/stale metadata before re-running the script.

Step 4: Rebuild the Trigger if Metadata is Corrupted

  • If the trigger appears in sys.triggers but still throws Error 4920, drop and recreate it to resolve potential system catalog corruption:
  DROP TRIGGER IF EXISTS dbo.YourTriggerName;
  GO
  CREATE TRIGGER dbo.YourTriggerName ON dbo.YourTableName
  AFTER INSERT, UPDATE
  AS
  BEGIN
      -- Trigger logic here
  END;
  • Run DBCC CHECKDB('YourDatabaseName') to rule out underlying catalog corruption on Windows Server 2025 storage volumes.

Alternative or Verification Steps

  • After applying the fix, run sp_helptrigger 'dbo.YourTableName' to confirm the trigger is listed and active on the correct table.
  • If the error persists, check for replication or Change Data Capture (CDC) jobs that may be referencing an orphaned trigger definition in msdb, and resync the publication/subscription if applicable.