【发布时间】:2015-08-06 20:43:02
【问题描述】:
我正在 SQL Server 中执行 INSERT INTO SELECT 语句。情况是两个不同表的两个主键没有任何共同之处,它们都是第三个表的外键,在最后一个表中形成一个复合主键。这通常可以通过交叉连接来完成 - 例如,
Table1.ID(PK)
Table2.Code(PK)
-- Composite PK for Table3
Table3.ID(FK)
Table3.Code(FK)
INSERT INTO Table3
SELECT ID, Code
FROM Table1
CROSS JOIN Table2
WHERE Some_conditions...
我收到“无法插入重复的键行”错误。不允许 Table2.Code 在 Table3 中重复,因为它是唯一的 ID,即使 Table3 的主键是 Table1.ID 与 Table2.Code 组合。因此,以下对应被识别为表 3 中的不同 PK 值,例如:{1024, PSV} 和 {1027, PSV}。
有没有办法解决这个问题,还是我设计的这个数据库不正确? 我曾考虑为 Table3 创建第三个唯一 ID,但在这种情况下非常不切实际。
【问题讨论】:
-
您的表中似乎已经有与新行冲突的数据。
-
你能发布实际的表定义和前两个表的几行吗?到目前为止,还没有发布很多细节,很难说发生了什么。
-
您是否可能对与主键分开的列之一具有唯一性约束?
-
第三张表是否有 IDENTITY 列?
-
不,它没有 - 请参阅原帖的最后一句话。
标签: sql sql-server composite-primary-key cross-join on-duplicate-key