首页 > 解决方案 > 从没有 PRIMARY KEY sql server 的不同表中插入行到具有 PRIMARY KEY 的表

问题描述

我希望能很好地解释我的问题

我有一个带有主键的新表。

如何从不同的表中插入表?我的问题是一张没有主键的表,我不知道如何从表中选择一行并插入到新表中。

例子 -

新表 1 图片

表 2 图片

表 3图片

我的脚本 -

insert AssetBusStops (AssetId,StopCode,StopId,Description,ZoneId)
select  Assets.Id,stops_ppp.stop_code,stops_ppp.stop_id,stops_ppp.stop_desc,stops_ppp.zone_id from Assets inner join stops_ppp 
on Assets.AssetCode = stops_ppp.stop_code 

例外 -

消息 2627,级别 14,状态 1,第 11 行违反主键约束“PK_AssetBusStops”。无法在对象“dbo.AssetBusStops”中插入重复键。重复键值为 (2763)。该语句已终止。

标签: sql-server

解决方案


20001表列的值AssetCode与表中的Assets3 行匹配stops_ppp,结果连接查询中的这 3 行在列中具有相同的2763id
因此,您的查询尝试插入 3 行,而不仅仅是 1 行,这会在主键中创建重复项,这是不允许的。
您应该在查询结果中应用过滤器,例如:

insert AssetBusStops (AssetId,StopCode,StopId,Description,ZoneId)
select top 1 ASsets.Id, 
  stops_ppp.stop_code, stops_ppp.stop_id, stops_ppp.stop_desc, stops_ppp.zone_id 
from Assets inner join stops_ppp 
on Assets.AssetCode = stops_ppp.stop_code 
order by stops_ppp.stop_code

这(对于您的示例数据)仅返回 1 行(您在评论中要求的任意流)并且可以安全地插入。


推荐阅读