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

Troubleshooting Guide: Error 4120 – Database Name Prefix Not Allowed for User-Defined Function

Why This Error Happens

This error occurs because SQL Server 2025 does not permit a user-defined function (UDF) call to be qualified with a database name when used in certain contexts, such as computed columns, check constraints, or default constraints. SQL Server restricts cross-database references in these specific contexts for binding and dependency-tracking reasons, since the object must be resolvable within the current database’s schema binding rules. This typically happens when a function is referenced as DatabaseName.SchemaName.FunctionName instead of the permitted SchemaName.FunctionName or dbo.FunctionName format within the same database context.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Statement

  • Review the error message in SQL Server Management Studio (SSMS) or the application log to locate the exact line number and object (view, constraint, or computed column) causing Error 4120.
  • Run the following query to locate recently modified objects that may reference cross-database functions:
SELECT name, object_id, modify_date 
FROM sys.objects 
WHERE type IN ('V', 'FN', 'TR') 
ORDER BY modify_date DESC;
  • Confirm whether the function call uses a three-part or four-part name (e.g., MyDB.dbo.MyFunction()).

Step 2: Remove the Database Name Prefix

  • Edit the script, view, or constraint definition to remove the leading database name from the function call.
  • Change SELECT MyDB.dbo.fn_CalculateTotal(OrderID) to SELECT dbo.fn_CalculateTotal(OrderID).
  • Ensure the function exists in the same database as the object referencing it; cross-database scalar function calls are not supported in schema-bound contexts.

Step 3: Migrate or Replicate the Function Locally

  • If the function genuinely resides in a different database, create a local copy of the function within the target database instead of referencing it remotely.
  • Use SSMS to script out the function definition: right-click the function → Script Function as → CREATE To → New Query Editor Window.
  • Execute the script against the local database so the dependent object can bind to a function within its own context.

Step 4: Rebuild Dependent Objects

  • After correcting the function reference, drop and recreate any views, computed columns, or constraints that failed to bind.
ALTER TABLE dbo.Orders 
ADD TotalAmount AS (dbo.fn_CalculateTotal(OrderID));
  • Validate that schema binding (if used) compiles without error by running sp_refreshsqlmodule on dependent views.

Step 5: Restart Dependent Services (If Applicable)

  • If the error persists in SSRS, SSIS, or an application connection pool, restart the SQL Server Agent or the application service on Windows Server 2025 to clear cached execution plans.
  • Open Services.msc, locate SQL Server (MSSQLSERVER), and restart the service to flush the plan cache.

Alternative or Verification Steps

  • Run DBCC FREEPROCCACHE and re-execute the original query/object creation script to confirm Error 4120 no longer appears.
  • If the function must remain centralized for multiple databases, consider converting it into a CLR function or replicating it via a scheduled synchronization job instead of relying on cross-database three-part naming.