SQL临时表含IDENTITY列时创建外键触发无主键候选键报错问题
问题原因
- 核心逻辑误区:
IDENTITY(自增)和NOT NULL约束不代表字段是主键,SQL数据库要求外键关联的被引用字段必须是主键或者带非空约束的唯一键(候选键),你创建的#Temp_Actor表的ActorId字段仅配置了自增和非空属性,没有添加主键或唯一约束,不符合外键关联的前置条件,因此触发报错。 - 补充说明:报错信息里的表名拼写差异属于临时表名称解析的常规截断/简写,不影响问题根因判断。
解决方法
两种方案二选一即可,推荐优先使用方案1:
方案1:给#Temp_Actor的ActorId添加主键约束
修改#Temp_Actor的建表语句,直接指定ActorId为主键,修改后完整代码如下:
CREATE TABLE #Temp_Actor ( ActorId INT IDENTITY (1,1) NOT NULL PRIMARY KEY -- 新增主键约束 ); INSERT INTO #Temp_Actor DEFAULT VALUES; INSERT INTO #Temp_Actor DEFAULT VALUES; INSERT INTO #Temp_Actor DEFAULT VALUES; CREATE TABLE #Temp_ThirdParty ( ThirdPartyActorId INT NOT NULL, CONSTRAINT PK_ThirdPartyActorId PRIMARY KEY (ThirdPartyActorId), CONSTRAINT FK_ThirdPartyActorId_ActorId FOREIGN KEY (ThirdPartyActorId) REFERENCES #Temp_Actor (ActorId) )
方案2:给#Temp_Actor的ActorId添加唯一约束
如果业务场景不适合将该字段设为主键,可以添加非空+唯一约束作为候选键供外键关联:
CREATE TABLE #Temp_Actor ( ActorId INT IDENTITY (1,1) NOT NULL UNIQUE -- 新增唯一约束 );
后续插入数据、创建第二张临时表的代码无需改动即可正常执行。
内容的提问来源于stack exchange,提问作者JGillardCCG
相关产品推荐
相关产品推荐

