我正在尝试编写一个查询,我应该验证记录是否已存在,如果是,则不要再次插入数据。
我写这个作为一个例子,我不知道我正在努力实现的正确语法。请在下面找到我的尝试。
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
。
如果可以在不使用合并的情况下执行此操作,我也很好奇。
答案 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
强>