无标识列TSQL表插入数据失败求助:预期插入2条记录
问题分析与解决办法
原语句无效的核心原因:
- 使用
JOIN Connect_Onprem.dbo.med_specialty会仅返回两边都存在的ID,而你需要的是Powerpath中存在但Connect中没有的新记录,这直接排除了目标数据。 - 最后的
ms.id = (SELECT MAX(id)+1...)逻辑完全错误:子查询中ms1.id = ms.id限定了只查询当前ms的ID,MAX(id)就是ms.id本身,加1后不可能等于ms.id,这会过滤掉所有记录。
正确的插入语句(两种可选)
方法1:用NOT EXISTS筛选不存在的记录
INSERT INTO Connect_Onprem.dbo.med_specialty(id, code, name, active) SELECT ms.id, ms.code, ms.name, ms.active FROM Powerpath_Dev.dbo.med_specialty ms WHERE ms.active = 'Y' AND NOT EXISTS ( SELECT 1 FROM Connect_Onprem.dbo.med_specialty cms WHERE cms.id = ms.id )
方法2:用LEFT JOIN筛选未匹配的记录
INSERT INTO Connect_Onprem.dbo.med_specialty(id, code, name, active) SELECT ms.id, ms.code, ms.name, ms.active FROM Powerpath_Dev.dbo.med_specialty ms LEFT JOIN Connect_Onprem.dbo.med_specialty cms ON ms.id = cms.id WHERE ms.active = 'Y' AND cms.id IS NULL
这两种写法都会找出Powerpath中active='Y'且Connect里不存在的记录,正好匹配你要插入2条(ID56、57)的需求,无需游标,执行效率也更高。
内容的提问来源于stack exchange,提问作者Asha Richardson
相关产品推荐
相关产品推荐

