联合所有不存在并插入

时间:2015-10-19 12:54:46

标签: sql sql-server tsql sql-server-2012

我正在尝试编写一个查询,我应该验证记录是否已存在,如果是,则不要再次插入数据。

我写这个作为一个例子,我不知道我正在努力实现的正确语法。请在下面找到我的尝试。

select * from
(
insert into dbo.myTable
select mt.* from #myTemp mt
union all
select * from #someTemp1
union all
select * from #someTemp2
) tb
where not exists ( select tb.* )

如果union all,这是使用not exists插入的正确方法吗? 我找到了一些选择union all where not exists的示例,但我希望看到一个insert

如果可以在不使用合并的情况下执行此操作,我也很好奇。

1 个答案:

答案 0 :(得分:2)

您可以按照评论中的建议使用MERGE,也可以使用现有值的总和substract

CREATE TABLE #myTable(col INT);

CREATE TABLE #myTemp(col INT);
CREATE TABLE #someTemp1(col INT);
CREATE TABLE #someTemp2(col INT);

INSERT INTO #myTable(col) VALUES (1), (2), (3);
INSERT INTO #myTemp(col) VALUES (10), (20), (30);
INSERT INTO #someTemp1(col) VALUES (1), (2), (3);
INSERT INTO #someTemp2(col) VALUES (11), (2), (31);

INSERT INTO #myTable(col)
(
  SELECT mt.col FROM #myTemp mt
  UNION ALL
  SELECT col FROM #someTemp1
  UNION ALL
  SELECT col FROM #someTemp2
)
EXCEPT
SELECT col FROM #myTable;


SELECT *
FROM #myTable;

LiveDemo