我试图从临时表插入到常规表中,但是由于临时表中的数据共享与要插入的表的主键相同的值,因此它失败,并违反了主键约束。这是预料之中的,因此我将通过仅插入要插入的表中不存在主键的行来解决此问题。
我尝试了EXISTS和 NOT IN 方法,我检查了展示这两种方法的示例,确认它们总体上都可以在SQL Server 2014中使用,但仍然出现以下错误:
违反PRIMARY KEY约束'PK_dbo.InsuranceObjects'。不能 在对象'dbo.InsuranceObjects'中插入重复键。重复的 键值为(3835fd7c-53b7-4127-b013-59323ea35375)。
这是我尝试过的 NOT IN 方差中的SQL:
print 'insert into InsuranceObjects'
INSERT INTO $(destinDB).InsuranceObjects
(
Id, Value, DefInsuranceObjectId
)
SELECT Id, InsuranceObjectsValue, DefInsuranceObjectId
FROM #vehicle v
WHERE v.Id NOT IN (SELECT Id FROM $(destinDB).InsuranceObjects) -- prevent error when running scrypt multiple times over
GO
如果不明显:
我肯定错过了一些显而易见的东西,但是让我发疯的是,如此简单的查询失败了。更糟糕的是,当我尝试运行不带插入部分的select时,尽管我已确认where子句中的 NOT IN 部分失败,但它会返回临时表中的所有记录。
答案 0 :(得分:3)
我怀疑问题是您的临时表中有重复的ID值。请检查此处的值,因为这会引起您所看到的问题。