【问题标题】:SQL Server - foreign key reference errorSQL Server - 外键引用错误
【发布时间】:2012-04-27 10:19:23
【问题描述】:

我有两张表,Table_1 有 4 列(3 个主键),Table_2 有 2 列。当我尝试在Table_2 中创建外键约束时,出现此错误:

这是我的表格的定义:

Table_1

CREATE TABLE [dbo].[Table_1]
(
    [Field_1] [tinyint] NOT NULL,
    [Field_2] [tinyint] NOT NULL,
    [Field_3] [tinyint] NOT NULL,
    [Field_4] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [Field_1] ASC,
    [Field_2] ASC,
    [Field_3] ASC
)

Table_2

CREATE TABLE [dbo].[Table_2]
(
    [Field_1] [tinyint] NOT NULL,
    [Field_2] [tinyint] NOT NULL
) ON [PRIMARY]

您对如何解决这个问题有任何想法吗?谢谢 -

【问题讨论】:

  • Field_1 不是主键。您应该通过视觉对象将其设为主键,或者将 Table_1 的脚本更改为 [Field_1] [tinyint] PRIMARY KEY
  • 嗨 Lieven,很抱歉我忘记在我的示例表上添加主键。无论如何,我已经更新了我的表,现在定义了主键。但我仍然遇到同样的错误。
  • 为了让 SQL Server 能够创建外键,必须确保给定外键只能返回 一个 记录。由于您在多个字段上都有一个主键,因此无法保证 Field_1 将是唯一的。如果您无法更改主键,您所能做的就是在Table_1.Field_1 上添加一个唯一索引。如果唯一索引也不可能,则无法创建外键。

标签: sql-server-2005 foreign-keys primary-key composite-primary-key


【解决方案1】:

Table_1 的主键是所有三个Field_1Field_2Field_3。为了引用另一个表中的键,您必须引用该键中的所有列 - 因此您需要将 Field_2Field_3 添加到 Table_2,并拥有所有尝试创建外键约束时包含三列。

或者,如果Field_1 本身是Table_1 的键,则通过重新定义主键或仅在Field_1Table_1 上添加UNIQUE 约束来声明它.然后,您将能够创建您尝试创建的外键。

【讨论】:

  • 添加一个 UNIQUE 约束解决了这个问题。谢谢达米安!
猜你喜欢
  • 2014-12-25
  • 2016-03-09
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
相关资源
最近更新 更多