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

Troubleshooting Guide: Error 4161 – “Only CLR Types Are Allowed in Delayed CLR Type Fetching”

Why This Error Happens

This error occurs when SQL Server 2025 attempts to resolve a user-defined type (UDT) or CLR-based column using delayed type fetching, but the underlying assembly metadata has become inconsistent or points to a non-CLR type definition. It is frequently triggered by corrupted assembly catalog entries, a mismatched or partially upgraded sys.assemblies table, or an incompatible CLR assembly that was registered under an older database compatibility level. In some cases, this also surfaces after an in-place upgrade where legacy CLR integration settings were not fully migrated to the new Windows Server 2025 / SQL Server 2025 runtime.

Step-by-Step Resolution Guide

Step 1: Verify CLR Integration Configuration

  • Open SQL Server Management Studio (SSMS) and connect to the affected instance.
  • Run sp_configure 'clr enabled' to confirm CLR integration is turned on.
  • If disabled, enable it using:
  EXEC sp_configure 'clr enabled', 1;
  RECONFIGURE;
  • Restart the SQL Server service via services.msc or Restart-Service MSSQLSERVER in PowerShell (run as Administrator).

Step 2: Validate and Rebuild Assembly Metadata

  • Query the system catalog to identify the problematic assembly:
  SELECT name, assembly_id, clr_name FROM sys.assemblies;
  • Drop and recreate any assembly showing a NULL or malformed clr_name value:
  DROP ASSEMBLY [YourAssemblyName];
  CREATE ASSEMBLY [YourAssemblyName]
  FROM 'C:\SQLAssemblies\YourAssembly.dll'
  WITH PERMISSION_SET = SAFE;
  • Ensure the .dll file path is accessible from the SQL Server service account.

Step 3: Check Database Compatibility Level

  • Confirm the database compatibility level matches SQL Server 2025 requirements:
  SELECT name, compatibility_level FROM sys.databases WHERE name = 'YourDatabase';
  • If outdated, update it:
  ALTER DATABASE [YourDatabase] SET COMPATIBILITY_LEVEL = 170;
  • Re-run the query or stored procedure that originally triggered Error 4161.

Step 4: Repair System Catalog Corruption (If Needed)

  • Run DBCC CHECKDB('YourDatabase') WITH DATA_PURITY; to rule out catalog-level corruption.
  • If corruption is detected in system tables related to CLR types, restore from the last known good backup rather than attempting automated repair, as REPAIR_ALLOW_DATA_LOSS can affect CLR metadata integrity.

Alternative or Verification Steps

  • After applying the fix, re-execute the original query or application call that referenced the CLR type; confirm Error 4161 no longer appears in the SQL Server error log (Management > SQL Server Logs in SSMS).
  • As an alternative, if the assembly is no longer needed, drop all dependent UDTs and functions referencing it, then fully remove and recreate the assembly from a verified source .dll to eliminate any residual metadata corruption.