我希望能很好地解释我的问题
我有一个带有主键的新表。
如何从不同的表插入表? 我的问题是一个没有主键的表,我不知道如何从表的第一行中选择并插入到新表中。
示例-
新表1 image
表2 image
表3 image
我的脚本-
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
例外-
第2级第1州第11行2627消息 违反主键约束'PK_AssetBusStops'。无法在对象'dbo.AssetBusStops'中插入重复键。重复键值为(2763)。 该声明已终止。
答案 0 :(得分:1)
表20001
的列AssetCode
的值Assets
与表stops_ppp
的3行匹配,结果联接查询中的这3行具有相同的值2763
列中的id
。
因此,您的查询尝试插入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行(按注释中的要求,为任意行),并且可以安全地插入。
答案 1 :(得分:0)
A)如果您没有FK可以列出AssetBusStops:
B)如果您有FK可以列出AssetBusStops: 尝试使用不存在或合并