Sql server 将sql server中不带主键的不同表中带主键的行插入到表中
我希望能很好地解释我的问题 我有一个带有主键的新表 如何从不同的表中插入表? 我的问题是一个没有主键的表,我不知道如何从表中选择一行并插入到新表中 范例- 新表1Sql server 将sql server中不带主键的不同表中带主键的行插入到表中,sql-server,Sql Server,我希望能很好地解释我的问题 我有一个带有主键的新表 如何从不同的表中插入表? 我的问题是一个没有主键的表,我不知道如何从表中选择一行并插入到新表中 范例- 新表1 AssetId是主键 表2 我需要在表1中插入一行 表3 我的剧本- insert AssetBusStops (AssetId,StopCode,StopId,Description,ZoneId) select Assets.Id,stops_ppp.stop_code,stops_ppp.stop_id,stops
- AssetId是主键
- 我需要在表1中插入一行
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
例外情况-
Msg 2627,第14级,状态1,第11行
违反主键约束“PK_AssetBusStops”。无法在对象“dbo.AssetBusStops”中插入重复键。重复的键值为(2763)。
声明已终止
表
Assets
的AssetCode
列的20001
值与表stops\u ppp
中的3行相匹配,结果关联查询中的这3行在id
列中具有相同的值2763
因此,您的查询尝试插入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行(注释中要求的任意ow),并且可以安全插入。A)如果您没有FK到表AssetBusStops:
尝试使用“不存在”或“合并”有关SQL的问题,请参阅。另外,
dbo.AssetBusStops
表的主键是什么?这个问题真的与MySQL有关吗?或者它实际上是关于“SQL server”(看起来是这样的)?@Progman谢谢你的帮助。。。我向SQL server提出的问题以及表AssetBusStops中assetId的主键在您的AssetBusStops
表中只能有唯一的assetId
值可以吗?还是您希望有多行具有相同的assetId
值?请将您的问题包括选择的输出。。。从…起内部连接。。。在…
部分,将其添加到您的查询中。还要检查是否有具有相同Assets.Id
值的条目,特别是2763
值的条目。谢谢您的朋友。。。。如果我想从stop_ppp中选择top(1)行并插入表assetbusstops,如何执行?top 1按什么顺序?所有3行都有相同的stop_代码,因此这将选择任意行。这是你想要的吗?不,不需要交叉申请。请参阅我编辑的答案。