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

Troubleshooting Guide: Error 4933 — Computed Column Cannot Be Persisted

Why This Error Happens

This error occurs because a PERSISTED computed column references a function, view, or object that is not schema-bound, meaning SQL Server cannot guarantee the underlying object’s definition won’t change. SQL Server requires deterministic and schema-bound dependencies to safely store (persist) computed values on disk. Without the SCHEMABINDING option applied to the referenced object, the engine cannot validate that future schema changes won’t silently corrupt the persisted data.

Step-by-Step Resolution Guide

Step 1: Identify the Dependent Object

  • Run sp_depends 'TableName' or query sys.sql_expression_dependencies to find the exact function or view the computed column relies on.
  • Confirm whether the referenced object is a user-defined function (UDF), view, or another computed column lacking SCHEMABINDING.
  • Example query:
  SELECT referenced_entity_name, referenced_schema_name 
  FROM sys.sql_expression_dependencies 
  WHERE referencing_id = OBJECT_ID('YourTableName');

Step 2: Alter the Referenced Object to Use SCHEMABINDING

  • Open the object definition using sp_helptext 'FunctionOrViewName'.
  • Add the WITH SCHEMABINDING clause to the CREATE FUNCTION or CREATE VIEW statement.
  • Ensure all underlying tables/columns are referenced using two-part naming (e.g., dbo.TableName), as schema-binding requires fully qualified names.
  • Example fix:
  ALTER FUNCTION dbo.CalculateTotal (@Price DECIMAL(10,2), @Qty INT)
  RETURNS DECIMAL(10,2)
  WITH SCHEMABINDING
  AS
  BEGIN
      RETURN (@Price * @Qty);
  END;

Step 3: Recreate or Alter the Computed Column

  • If the table already exists, drop and recreate the computed column definition to force SQL Server to re-validate the dependency chain.
  • Use ALTER TABLE to redefine the column with PERSISTED:
  ALTER TABLE dbo.YourTable
  ADD TotalPrice AS dbo.CalculateTotal(Price, Qty) PERSISTED;
  • If an error persists, check for nested dependencies (a view referencing a non-schema-bound function).

Step 4: Rebuild Indexes and Statistics (Windows Server 2025 Environment)

  • Since persisted columns can be indexed, rebuild any indexes affected by the alteration to avoid fragmentation.
  • Use SQL Server Management Studio (SSMS) or run:
  ALTER INDEX ALL ON dbo.YourTable REBUILD;
  • Restart the SQL Server (MSSQLSERVER) service via services.msc on Windows Server 2025 if schema changes do not immediately propagate to the query optimizer cache.

Alternative or Verification Steps

  • Verification: Re-run the original ALTER TABLE or CREATE TABLE statement that triggered Error 4933; if it completes without error, the schema-binding dependency chain is resolved.
  • Alternative: If SCHEMABINDING cannot be applied (e.g., due to third-party code restrictions), remove the PERSISTED keyword from the computed column definition entirely and let SQL Server calculate the value at runtime instead of storing it on disk.