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

Troubleshooting Guide: Error 2796 — “Cannot specify database name with $partition in a Schema-bound object”

Why This Error Happens

This error occurs when a schema-bound object, such as a view created WITH SCHEMABINDING or an indexed view, references the $partition function while also qualifying it with a database name (e.g., SomeDatabase.$partition.MyPartitionFunction). SQL Server 2025 enforces strict rules for schema-bound objects because they must resolve dependencies entirely within the local database context to maintain binding integrity. Since $partition is a system-level construct tied to partition functions, cross-database qualification breaks the engine’s ability to validate and lock the schema dependency chain, triggering Error 2796.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Object Definition

  • Query sys.sql_modules or use SSMS Object Explorer to locate the schema-bound view, function, or computed column causing the error.
  • Run the following to search definitions containing $partition:
  SELECT object_id, definition 
  FROM sys.sql_modules 
  WHERE definition LIKE '%$partition%';

Step 2: Remove the Database Name Qualifier

  • Edit the T-SQL definition so that $partition is referenced without a database prefix.
  • Change syntax from:
  SELECT * FROM SomeDatabase.$partition.MyPartitionFunction(ColumnName)

to:

  SELECT * FROM $partition.MyPartitionFunction(ColumnName)
  • Ensure the object is created in the same database where the partition function is defined.

Step 3: Drop and Recreate the Schema-Bound Object

  • Script out the existing CREATE VIEW or CREATE FUNCTION statement with the corrected syntax.
  • Execute DROP VIEW (or DROP FUNCTION) followed by the corrected CREATE ... WITH SCHEMABINDING statement.
  • Confirm there are no other dependent objects referencing the old definition using sys.sql_expression_dependencies.

Step 4: Validate Partition Function Scope

  • Confirm the partition function (MyPartitionFunction) actually resides in the same database as the schema-bound object.
  • If the partition function is in a different database, you cannot use $partition directly across databases — instead, replicate the partition function locally or redesign the object to avoid schema binding.

Alternative or Verification Steps

  • Re-run the CREATE VIEW/CREATE FUNCTION statement and confirm it compiles without Error 2796 in SSMS or Azure Data Studio.
  • If schema binding isn’t strictly required, consider removing WITH SCHEMABINDING as a quick workaround, though this sacrifices some query optimization benefits tied to indexed views.