我想从一个表插入一些数据到另一个,但我想阻止插入重复的行。我目前以下查询:防止使用SQL Server 2008插入重复行
INSERT INTO Table1
(
Table1Col1,
Table1Col2,
Table1Col3,
Table1Col4,
Table1Col5
)
SELECT
Table2Col1,
Table2Col2 = constant1,
Table2Col3 = constant2,
Table2Col4 = constant3,
Table2Col5 = constant4
FROM Table2
WHERE
Condition1 = constant5
AND
Condition2 = constant6
AND
Condition3 = constant7
AND
Condition4 LIKE '%constant8%'
什么我不知道的是,我试图从表2插入到表1的行可能已经存在,我想,以防止发生这种可能的重复和跳过插入然后转到插入下一个唯一的行。
我已经看到我可以使用WHERE NOT EXISTS子句和INTERSECT关键字的使用,但我没有完全理解如何将它应用于我的特定查询,因为我只想使用Table2中的一些选定数据,然后将一些常量值插入到Table1中。
编辑:
我要补充一点TableCol2通过对TableCol5实际上并不存在于结果集中的列,我只是填充这些列一起Table2Col1返回的。
您可以在您的列上定义一个应该是唯一的'UNIQUE'约束 - 那么没有“重复”插入将工作(会导致错误代替) – 2012-08-16 10:47:54
重复行一个与table1中的行完全相同或列的子集定义唯一性? – 2012-08-16 12:16:02
@NikolaMarkovinović它是定义唯一性的Table1Col1,Table1Col2和TableCol3的子集。 – Aesir 2012-08-16 12:56:56