从选择和插入插入

时间:2019-02-25 13:35:07

标签: sql sql-server insert

我正在尝试编写一个存储过程,该过程将基于查询在表上自动创建条目。 目标表确实有一个GUID字段,因此,如果该过程多次运行,将插入重复的条目。

过程如下:

INSERT INTO TABLE1 (a, b, c, d, GUID)
SELECT a, b, c, d, NEWID() FROM TABLE2

如何通过检查其他字段(GUID字段除外)是否已经存在来避免重复?

谢谢。

3 个答案:

答案 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