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.triggerswithparent_class_descto confirm if the trigger isOBJECT_OR_COLUMN(table-level) orDATABASE(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 usingALTER TABLE; useENABLE/DISABLE TRIGGER ... ON DATABASEinstead. - Update your script to reference the correct command scope.
Step 3: Correct the Table and Schema Reference
- Ensure the
ALTER TABLEstatement explicitly includes the correct schema (e.g.,dbo.Ordersinstead of justOrders). - 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.triggersbut 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.