sql-server - 从没有 PRIMARY KEY sql server 的不同表中插入行到具有 PRIMARY KEY 的表
问题描述
我希望能很好地解释我的问题
我有一个带有主键的新表。
如何从不同的表中插入表?我的问题是一张没有主键的表,我不知道如何从表中选择一行并插入到新表中。
例子 -
新表 1 图片
- AssetId 是主键
表 2 图片
- 我需要在表 1 中插入一行
表 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)。该语句已终止。
解决方案
20001
表列的值AssetCode
与表中的Assets
3 行匹配stops_ppp
,结果连接查询中的这 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 行(您在评论中要求的任意流)并且可以安全地插入。
推荐阅读
- javascript - 使用 js 在 div 中附加 div
- icalendar - TZOFFSETFROM 和 TZOFFSETTO 的确切含义是什么以及如何计算/使用它?
- amazon-web-services - Athena 和 CloudTrail - ['account','year','month','day'] 上的分桶(无区域)
- asp.net - 向 ASP.NET Api 添加排序、分页和过滤
- node.js - mongoose.connection 在节点中做了什么?
- ruby-on-rails - Ruby gem,模型的未定义方法“ruby gem name”(调用“Model.connection”建立连接):类)
- xaml - 如何将控件的内容绑定到 XAML 中 VIEW 类型的属性
- mongodb - 使用 PySpark 结构化流将 Kafka 流接收到 MongoDB
- spring-boot - 遇到错误“考虑在您的配置中定义一个 'java.util.concurrent.atomic.AtomicReference' 类型的 bean”
- python - 启动 Python REPL 并执行命令