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

Troubleshooting Guide: SQL Server Error 4113 – “The function ‘%.*ls’ is not a valid windowing function”

Why This Error Happens

This error occurs when a T-SQL query attempts to use a standard aggregate or scalar function (such as COUNT, AVG, or a custom scalar function) with an OVER() clause that it does not support, or when the OVER() clause contains invalid components (like ORDER BY on a function that only accepts partitioning). SQL Server 2025 strictly validates windowing syntax against a defined list of ranking, aggregate, and analytic functions, and any mismatch—often caused by a typo, a deprecated function name, or copying syntax from an incompatible database platform—triggers this parsing failure. It can also happen if a user-defined function (UDF) is incorrectly assumed to support windowing semantics.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Function in the Query

  • Open the query in SQL Server Management Studio (SSMS) or Azure Data Studio and locate the exact function named in the error message (e.g., %.*ls will be replaced with the actual function name like STRING_AGG or a custom UDF).
  • Check the official Microsoft documentation for SQL Server 2025 to confirm whether this function is on the supported list for OVER() clauses (valid categories include Ranking, Aggregate, and Analytic functions).
  • Run SELECT * FROM sys.all_objects WHERE name = 'YourFunctionName' to confirm if it is a scalar UDF, which generally cannot be used with OVER().

Step 2: Correct the OVER() Clause Syntax

  • If using an aggregate function like SUM(), COUNT(), or AVG(), ensure the syntax follows: FunctionName(column) OVER (PARTITION BY column ORDER BY column).
  • Remove the ORDER BY sub-clause if you are using a function that only supports partitioning (rare, but applies to some legacy functions).
  • If using a Ranking function like ROW_NUMBER(), RANK(), or DENSE_RANK(), verify you have included the mandatory ORDER BY clause, as these functions will fail without it.

Step 3: Replace Unsupported Scalar Functions

  • If a custom Scalar UDF is being used with OVER(), rewrite the logic using a Common Table Expression (CTE) combined with ROW_NUMBER() or APPLY operators instead.
  • Navigate to C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG to check if the query originated from an automated job or linked server to identify the source application generating the invalid syntax.
  • Update any application code (e.g., in ORM tools like Entity Framework or Dapper) that might be auto-generating this invalid windowing syntax.

Step 4: Validate Compatibility Level

  • Run SELECT compatibility_level FROM sys.databases WHERE name = 'YourDatabaseName'; to check the current database compatibility level.
  • If the database is running on an older compatibility level (e.g., 130 or lower) inside the new SQL Server 2025 engine, some newer windowing functions may not parse correctly; update it using ALTER DATABASE YourDatabaseName SET COMPATIBILITY_LEVEL = 170;.

Alternative or Verification Steps

  • Verification: Re-run the corrected query in a test environment; if the function executes and returns a result set without throwing Error 4113, the syntax fix was successful.
  • Alternative: If a legacy third-party application is generating this error and you cannot modify the source code, create a Stored Procedure wrapper that sanitizes the input and uses a supported windowing function alias before passing data back to the application.