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

Why This Error Happens

Error 3821 occurs when SQL Server detects that a foreign key constraint relies on an underlying function, computed column definition, or schema-bound object whose implementation has changed since the constraint was originally created. This typically happens after applying a Cumulative Update (CU) or Servicing Pack that modifies internal system function behavior, or when a user alters a deterministic function that a computed column (referenced by the FK) depends on. Because SQL Server cannot guarantee the referential integrity logic is still valid, it automatically disables the constraint rather than risk silent data corruption.

Step-by-Step Resolution Guide

Step 1: Identify the Disabled Constraint and Dependent Object

  • Run the following query to locate all disabled foreign keys in the affected database:
SELECT name, OBJECT_NAME(parent_object_id) AS TableName, is_disabled 
FROM sys.foreign_keys 
WHERE is_disabled = 1;
  • Cross-reference the table/column mentioned in the error message with sys.computed_columns to check if a computed column is involved.
  • Note the exact schema, table, and constraint name from the Event Viewer log (Path: Applications and Services Logs > SQL Server).

Step 2: Validate the Underlying Function or Computed Column

  • Check if a user-defined function (UDF) referenced in a computed column was recently altered (e.g., changed from SCHEMABINDING deterministic to non-deterministic).
  • If a UDF is the cause, script out the current function definition using SSMS (Right-click Function > Script Function as > CREATE To).
  • Verify compatibility level hasn’t shifted unexpectedly:
SELECT compatibility_level FROM sys.databases WHERE name = 'YourDBName';

Step 3: Manually Re-Enable and Validate the Constraint

  • Do not simply re-enable the constraint blindly, as this skips validation. Instead, force SQL Server to re-check existing data integrity using WITH CHECK:
ALTER TABLE [Schema].[TableName] 
WITH CHECK CHECK CONSTRAINT [FK_ConstraintName];
  • If the command fails, it confirms orphaned data exists that violates the relationship; you must clean this data before the constraint can be trusted again.
  • If the underlying function changed intentionally (e.g., via a CU), you may need to drop and recreate the Foreign Key constraint entirely to force SQL Server to re-link the dependency metadata:
ALTER TABLE [Schema].[TableName] DROP CONSTRAINT [FK_ConstraintName];
ALTER TABLE [Schema].[TableName] ADD CONSTRAINT [FK_ConstraintName] 
FOREIGN KEY (ColumnName) REFERENCES [RefTable](RefColumn);

Step 4: Apply the Latest Cumulative Update

  • Navigate to Windows Update or the Microsoft Download Center to ensure SQL Server 2025 is patched to the latest build, as this specific bug is often tied to a regression in computed column handling found in early CU releases.
  • Restart the SQL Server (MSSQLSERVER) service via services.msc after patching.

Alternative or Verification Steps

  • Verification: Re-run the sys.foreign_keys query from Step 1; the is_disabled column should now read 0 for the specific constraint, and the SQL Server Error Log should no longer show Error 3821 on subsequent data modification attempts.
  • Alternative: If the constraint continually fails to validate due to a complex computed column dependency, consider converting the computed column to a persisted column (PERSISTED keyword) to stabilize the physical storage and prevent the dependency check from triggering on every schema change.