SQLServer2005/在被引用表 'tab2' 中没有与外键 'fk_tab12tab2' 中的引用列列表匹配的主键或候选键。

本文解决SQL Server 2005中因表'tab2'的外键'fk_tab12tab2'与引用列不匹配导致的错误。通过将被引用字段设置为主键或唯一键来确保其唯一性。

                      SQLServer2005/在被引用表 'tab2' 中没有与外键 'fk_tab12tab2' 中的引用列列表匹配的主键或候选键。

  这个原因是由于表2被引用的的字段不是候选键或者不是主键,说白了就是确保它是唯一的;

 CREATE TABLE tab1
( id int,
  name varchar(30)
  );
 
     CREATE TABLE tab2
  (
      name2 VARCHAR(30) 
  );
 

--将表tab2的字段name2作为tab1的外键,

  ALTER TABLE tab1 ADD CONSTRAINT fk_tab12tab2  FOREIGN KEY (name) REFERENCES tab2(name2);

 

--错误信息

/*消息 1776,级别 16,状态 0,第 1 行
在被引用表 'tab2' 中没有与外键 'fk_tab12tab2' 中的引用列列表匹配的主键或候选键。
消息 1750,级别 16,状态 0,第 1 行
无法创建约束。请参阅前面的错误消息。
*/

 

//将字段name2作为主键,如果按照如下方式建立表,那么结果通过。
  CREATE TABLE tab2
  (
      name2 VARCHAR(30) PRIMARY KEY
  );

 

--命令已成功完成。

 

//将字段name2设为唯一,

   CREATE TABLE tab2
  (
      name2 VARCHAR(30)  UNIQUE
  );

 

那么结果也是通过的。

--命令已成功完成。

 

 

 

如果要删除约束:

ALTER TABLE tab1 DROP CONSTRAINT fk_tab12tab2

这个错误信息通常出现在数据库操作中,特别是当你在创建修改结构时,涉及到约束。以下是对这个错误的详细解释和可能的解决方法: 1. **错误解释**: - (Foreign Key)是用于建立和加强两个数据之间的链接的一。通过将保存(子中的字段另一个(主中的字段进行关联,可以确保数据的完整性和一致性。 - 错误信息“在被引用 'Student' 中没有 'FK__SC__SNo__1FCDBCEB' 中的引用列表匹配主键候选示在 'Student' 中没有找到 'FK__SC__SNo__1FCDBCEB' 相对应的2. **可能的原因**: - 'Student' 中没有定义主键(Primary Key)候选(Candidate Key)。 - 'Student' 中定义的主键候选 'FK__SC__SNo__1FCDBCEB' 中的数据类型不匹配。 3. **解决方法**: - 确保 'Student' 中有一个主键候选,并且这个的名称和数据类型 'FK__SC__SNo__1FCDBCEB' 中引用匹配。 - 检查约束的定义,确保引用名和数据类型正确无误。 例如,假设你有两个:`Student` 和 `SC`,其中 `SC` 有一个 `SNo` 引用 `Student` 的 `SNo` 。确保 `Student` 中有一个主键候选 `SNo`,并且数据类型 `SC` 中的 `SNo` 匹配。 ```sql -- 创建 Student 并定义主键 CREATE TABLE Student ( SNo INT PRIMARY KEY, SName VARCHAR(50) ); -- 创建 SC 并定义 CREATE TABLE SC ( SNo INT, CNo INT, PRIMARY KEY (SNo, CNo), FOREIGN KEY (SNo) REFERENCES Student(SNo) ); ``` 通过这种方式,你可以确保约束的正确性,避免出现上述错误。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值