我正在尝试编写一个存储过程,该过程将基于查询在表上自动创建条目。 目标表确实有一个GUID字段,因此,如果该过程多次运行,将插入重复的条目。
过程如下:
INSERT INTO TABLE1 (a, b, c, d, GUID)
SELECT a, b, c, d, NEWID() FROM TABLE2
如何通过检查其他字段(GUID字段除外)是否已经存在来避免重复?
谢谢。
答案 0 :(得分:1)
您可以使用EXISTS
子句:
INSERT INTO TABLE1 (a, b, c, d, GUID)
SELECT a, b, c, d, NEWID() FROM TABLE2 t2
WHERE NOT EXISTS (SELECT 1 FROM TABLE1 t1
WHERE t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c AND t1.d = t2.d);
答案 1 :(得分:0)
您可以使用以下查询获得所需的结果。
内部查询从table2返回表1中不存在的所有记录,然后将唯一记录插入表1中
INSERT INTO TABLE1 (a, b, c, d, GUID)
select a,b,c,d, newid() from
(
SELECT a, b, c, d FROM TABLE2
except
SELECT a, b, c, d FROM TABLE1
) a
答案 2 :(得分:0)
您可以使用LEFT JOIN
查找在Table2中没有与Table1匹配的记录,然后将其插入。
INSERT INTO TABLE1 (a, b, c, d, GUID)
SELECT t2.a, t2.b, t2.c, t2.d, NEWID()
FROM TABLE2 t2
LEFT JOIN TABLE1 t1
ON t1.a=t2.a AND t1.b=t2.b AND t1.c=t2.c AND t1.d = t2.d
WHERE t1.a IS NULL