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

Troubleshooting Guide: SQL Server Error 11522

Why This Error Happens

Error 11522 occurs when SQL Server’s query optimizer cannot determine the metadata (result set schema) for a stored procedure because a parameter referenced within the statement was never declared in the procedure’s parameter list. This typically happens when a parameter is misspelled, referenced before declaration, or used in a dynamic SQL context (like inside sp_executesql or a derived table) where the engine cannot statically resolve its data type and nullability. SQL Server 2025’s stricter metadata-discovery engine for native procedures and inline functions is particularly sensitive to this during the binding phase.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Statement and Procedure

  • Open the full error message in SQL Server Management Studio (SSMS) or Azure Data Studio; it will specify the exact statement text and procedure name.
  • Run sp_helptext '<ProcedureName>' to pull the full definition of the procedure into a query window for review.
  • Look specifically at the line referenced in the %.*ls placeholder of the error to locate the parameter usage.

Step 2: Verify Parameter Declaration Syntax

  • Check the CREATE PROCEDURE header to confirm every parameter used in the body is explicitly declared with an @ prefix and a data type (e.g., @CustomerID INT).
  • Look for common typos, such as using @CustomerId in the body when the declared parameter is @CustomerID (case mismatches generally pass, but missing characters will not).
  • Ensure no parameter is referenced in a WHERE clause or SELECT list before its DECLARE statement if it is a local variable rather than an input parameter.

Step 3: Correct Dynamic SQL and Metadata-Sensitive Contexts

  • If the parameter is used inside a dynamic SQL string executed via sp_executesql, ensure the parameter is defined in the @params definition string, not just the execution call.
  • For statements involving OPENQUERY, OPENROWSET, or table-valued functions, explicitly cast the parameter using CAST(@Param AS INT) so the optimizer can resolve the type without executing the batch.
  • Avoid using an undeclared parameter directly inside a UNION, PIVOT, or computed column definition, as these require static type resolution during compilation.

Step 4: Recompile and Validate the Procedure

  • Execute EXEC sp_recompile '<ProcedureName>'; in SSMS to clear any cached, invalid execution plans tied to the old procedure definition.
  • Re-run the corrected ALTER PROCEDURE script to push the updated parameter list to the SQL Server 2025 instance.
  • Restart the SQL Server Agent service via the Services console (services.msc) on Windows Server 2025 if scheduled jobs continue to reference the cached, broken plan.

Alternative or Verification Steps

  • Verify the Fix: Run SET FMTONLY ON; followed by EXEC <ProcedureName> in a test query window; if the metadata resolves without throwing Error 11522, the parameter declarations are now valid.
  • Alternative Workaround: If the parameter must remain dynamic, wrap the result set assignment using the WITH RESULT SETS clause in the EXECUTE statement to manually define the output schema, bypassing the automatic metadata discovery that triggers this error.