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

Troubleshooting Guide: SQL Server Error 1776 — Foreign Key Reference Mismatch

Why This Error Happens

This error occurs when SQL Server 2025 attempts to create a foreign key constraint, but the referenced table lacks a primary key or unique constraint (candidate key) that exactly matches the column(s) listed in the foreign key definition. The most common root cause is a mismatch in column order, data type, or count between the referencing and referenced columns. It can also occur if the target table’s unique index was dropped or altered after the foreign key relationship was originally designed, leaving the schema out of sync.

Step-by-Step Resolution Guide

Step 1: Identify the Referenced Table’s Existing Keys

  • Open SQL Server Management Studio (SSMS) 21 or Azure Data Studio connected to your SQL Server 2025 instance.
  • Run the following query to inspect existing keys on the referenced table:
  SELECT i.name AS IndexName, i.is_primary_key, i.is_unique, c.name AS ColumnName
  FROM sys.indexes i
  INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
  INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
  WHERE i.object_id = OBJECT_ID('dbo.ReferencedTableName');
  • Confirm whether a Primary Key (is_primary_key = 1) or Unique Constraint (is_unique = 1) exists on the exact column(s) you are trying to reference.

Step 2: Compare Column Definitions on Both Tables

  • Check that the data types, lengths, and precision of the referencing (child) column exactly match the referenced (parent) column.
  • Use this query to compare metadata side-by-side:
  SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_NAME IN ('ReferencedTableName', 'ReferencingTableName');
  • Pay close attention to composite foreign keys; the order of columns in the FOREIGN KEY (col1, col2) clause must match the order in the parent table’s PRIMARY KEY or UNIQUE constraint exactly.

Step 3: Create the Missing Unique Constraint or Primary Key

  • If no matching key exists, add one to the parent table using SSMS or T-SQL:
  ALTER TABLE dbo.ReferencedTableName
  ADD CONSTRAINT UQ_ReferencedTable_ColumnName UNIQUE (ColumnName);
  • Ensure the column does not contain duplicate values prior to running this command, as SQL Server will reject the constraint if duplicates exist.
  • If duplicates are found, clean the data first:
  SELECT ColumnName, COUNT(*)
  FROM dbo.ReferencedTableName
  GROUP BY ColumnName
  HAVING COUNT(*) > 1;

Step 4: Re-run the Foreign Key Creation Script

  • Once the unique index or primary key is successfully applied, re-attempt the original ALTER TABLE ... ADD CONSTRAINT FOREIGN KEY statement.
  • Verify the script syntax references the correct schema (e.g., dbo.) if using non-default schemas, as schema mismatches can sometimes trigger this error even when keys technically exist.

Alternative or Verification Steps

  • Verify the Fix: Navigate to the table in SSMS Object Explorer, expand Keys, and confirm the new Foreign Key relationship appears without a warning icon; alternatively, run sys.foreign_keys to check is_disabled = 0.
  • Alternative Approach: If altering the production schema to add a unique key is not feasible, consider using a CHECK constraint combined with a trigger to enforce referential integrity logically, rather than relying on a strict FOREIGN KEY constraint.