SQL 插入到记录不存在的地方

SQL Insert Into Where Record Not Exists

我有一个每周将数据附加到 Table1 的自动化流程。它只有 4 列 [Reason, Number of Occurences, Sent Date, and Program]Table1 不断增长,不关心重复记录。 (每周只有 26 条记录,只有 4 列,所以 performance/space 不是问题)

我还有一个 table Table2,我只想要来自 Table1 的不同记录。如果记录已经存在于 Table 2 我不想插入记录。 我认为下面的语句会起作用,但它不起作用:

begin transaction
insert into [Database]..[Table2]
select Distinct * from [Database]..[Table1]
where not exists (select * from [Database]..[Table2])

(0 row(s) affected)

如果我注释掉 WHERE 子句,它会起作用,但它会插入已经存在于 Table2

中的记录
begin transaction
    insert into [Database]..[Table2]
    select Distinct * from [Database]..[Table1]
    --where not exists (select * from [Database]..[Table2])

(83 row(s) affected)

如何检查 Table1 中的不同记录,如果该记录在 Table2 中不存在,请插入该记录?

我正在使用 MS SQL 服务器版本 11.0.6020.0

在SQL服务器中,您将使用except。假设表具有相同的列:

insert into [Database]..[Table2]
    select Distinct t1.*
    from [Database]..[Table1] t1
    except
    select t2.*
    from [Database]..[Table2] t2;

您的 not exists 子句与 table1 中的数据不相关,因此它没有达到您的预期。

我认为您也可以使用 MERGE 语句,它只有一个条件 WHEN NOT MATCHED BY TARGET 然后您将直接在目标 table.

中插入该行

注意:请考虑来源 table.

中的 DISTINCT 行

您需要在内部 select 添加一个额外的 WHERE 子句来比较表 2 和表 1 的记录:

begin transaction
insert into [Database]..[Table2]
select Distinct * from [Database]..[Table1] t1
where not exists (
  select * from [Database]..[Table2] t2 
  where t1.reason=t2.reason 
    AND t1.occurences=t2.occurences 
    AND t1.sent_date=t2.sent_date 
    AND t1.program=t2.program
)