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

Troubleshooting Guide: SQL Server Error 2377 — “Result of expression is statically ’empty'”

Why This Error Happens

Error 2377 occurs when the SQL Server Query Optimizer statically analyzes a Transact-SQL expression — often within computed columns, check constraints, or Intelligent Query Processing (IQP) scalar inlining — and determines that it will always evaluate to an empty result set or NULL regardless of runtime input. This typically stems from contradictory predicates, a type mismatch during an implicit conversion, or a logic error introduced after a schema change (such as a column being altered to a non-matching data type). It can also surface after upgrading compatibility levels in SQL Server 2025, which exposes stricter static analysis rules in the optimizer that previous versions silently ignored.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Object

  • Check the SQL Server error log or Extended Events session for the exact statement or module name referenced by the %ls placeholder in the error text.
  • Run the following to isolate recently modified objects:
  SELECT name, modify_date FROM sys.objects ORDER BY modify_date DESC;
  • Note whether the error originates from a view, computed column, user-defined function, or an inline table-valued function.

Step 2: Review and Correct the Expression Logic

  • Open the object definition using SQL Server Management Studio (SSMS) 21 or Azure Data Studio.
  • Look for contradictory WHERE clauses (e.g., WHERE 1 = 0 or WHERE ColumnA = 'X' AND ColumnA = 'Y').
  • Check for implicit data type conversions that always fail, such as comparing an INT column against a non-numeric string literal.
  • Rewrite the logic using explicit CAST or CONVERT functions to ensure type-safe comparisons:
  SELECT * FROM dbo.Orders WHERE CAST(OrderStatus AS VARCHAR(10)) = 'Shipped';

Step 3: Adjust Database Compatibility Level (If Needed)

  • Navigate to Databases > [YourDatabase] > Properties > Options in SSMS, or run:
  ALTER DATABASE [YourDatabase] SET COMPATIBILITY_LEVEL = 160;
  • Temporarily lowering compatibility level can confirm whether a new optimizer rule in SQL Server 2025 is triggering the static analysis.
  • Only use this as a diagnostic step — plan to fix the underlying expression rather than permanently downgrading compatibility.

Step 4: Clear Cached Execution Plans

  • After correcting the code, remove any stale cached plans tied to the faulty expression:
  DBCC FREEPROCCACHE;
  • On Windows Server 2025, restart the SQL Server (MSSQLSERVER) service via services.msc if the issue persists after cache clearing.

Step 5: Validate Check Constraints and Computed Columns

  • Script out all check constraints and computed columns on the affected table:
  EXEC sp_helpconstraint 'dbo.YourTable';
  • Drop and recreate any constraint found referencing a logically impossible condition.

Alternative or Verification Steps

  • Re-run the original query or execute the stored procedure/view in isolation to confirm Error 2377 no longer appears in SSMS or the Windows Event Viewer (Applications and Services Logs > MSSQLSERVER).
  • If the error persists, use SET SHOWPLAN_XML ON to inspect the execution plan directly — this reveals exactly which predicate the optimizer is folding to “empty,” allowing for a more targeted fix than relying on error text alone.