我有一组临时表,在插入目标表之前,我接受数据,清理并清理它们。目标表有一个主键约束,我插入的是主键。
在插入之前,我检查目标表中是否缺少主键。我根据主键的缺席只插入不在目标表中的记录:
INSERT INTO Target
SELECT
primKey
, user_state
, test_state
FROM
myStagingTable3
到目前为止,stagingTable3只有使用以下where子句在目标表中不存在的数据:
WHERE
primKey not in (Select primKey from Target)
不知何故,我收到了主键违规错误:
Msg 2627,等级14,状态1.(程序在##行失败) 违反主键约束'pk1101AE'。无法插入 对象'Target'中的重复键
我的问题:
很明显,我的登台表有密钥,而目标表没有。插入失败了。
答案 0 :(得分:2)
这是因为您的登台表包含多个具有相同primKey值的行。
如果重复的{user_state, test_state}
对中的group by
对与插入内容无关,则可以通过添加简单INSERT INTO Target
(SELECT
primKey
, MAX(user_state)
, MAX(test_state)
FROM
myStagingTable3
GROUP BY primKey)
完全绕过此问题,如下所示:
{{1}}