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

Troubleshooting Guide: SQL Server Error 154 — “%SMSG is not allowed in %SMSG”

Why This Error Happens

Error 154 in Microsoft SQL Server 2025 occurs when a Data Manipulation Language (DML) statement or clause is used in a context where SQL Server’s parser explicitly disallows it — commonly when placing an ORDER BY clause inside a view, inline function, or derived table definition without a TOP, OFFSET, or FOR XML modifier. This is a syntax-scope violation rather than a permissions or connectivity issue, meaning the T-SQL batch itself violates SQL Server’s object-definition rules. It frequently surfaces after migrating legacy T-SQL scripts to SQL Server 2025, as stricter parser validation may catch constructs that were previously tolerated or auto-corrected in older engine versions.

Step-by-Step Resolution Guide

Step 1: Identify the Exact Statement Triggering Error 154

  • Open SQL Server Management Studio (SSMS) connected to your Windows Server 2025 instance and re-run the failing script in isolation.
  • Check the Messages tab for the precise line number and object name (view, function, or stored procedure) referenced in the %S_MSG placeholders.
  • Cross-reference the object definition using sys.sql_modules if the error originates from a stored object:
  SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('YourObjectName');

Step 2: Correct the Invalid Clause Placement

  • If the error involves a view or inline table-valued function, remove any standalone ORDER BY clause that lacks TOP, OFFSET/FETCH, or FOR XML.
  • Rewrite the object to move sorting logic to the outer query instead of embedding it inside the view/function body:
  -- Invalid inside a view:
  ORDER BY ColumnName

  -- Valid alternative:
  SELECT TOP (100) PERCENT ColumnName FROM TableName ORDER BY ColumnName
  • Apply the same review to any INSERT, UPDATE, or DELETE statements nested improperly inside CTEs (Common Table Expressions) or subqueries, as these are also restricted contexts under strict parsing.

Step 3: Update Compatibility Level and Re-Validate Scripts

  • Check the database compatibility level, since SQL Server 2025 enforces newer parser rules at higher compatibility levels:
  SELECT compatibility_level FROM sys.databases WHERE name = 'YourDatabaseName';
  • If scripts were written for older compatibility levels (130 or below), test both raising to 170 (2025 native) and temporarily lowering to isolate whether the issue is compatibility-driven:
  ALTER DATABASE YourDatabaseName SET COMPATIBILITY_LEVEL = 170;
  • Re-deploy the corrected object definition using CREATE OR ALTER to avoid orphaned permissions on the original object.

Step 4: Rebuild Affected Views or Procedures

  • Drop and recreate any view/function that previously relied on deprecated syntax patterns rather than using ALTER, since cached execution plans may retain the invalid parse tree.
  • Clear the procedure cache for the specific database to eliminate stale plan references:
  DBCC FREEPROCCACHE;

Alternative or Verification Steps

  • Verify the fix by executing the corrected object standalone (SELECT * FROM dbo.YourView; or EXEC dbo.YourProcedure;) and confirming Error 154 no longer appears in the Messages pane.
  • If the error persists after syntax correction, run DBCC CHECKDB('YourDatabaseName') to rule out metadata corruption affecting the system catalog views (sys.sql_modules, sys.objects) that store the object definitions.