我正在尝试编写一个查询,在其中我应该验证记录是否已经存在,如果存在,则不要再次插入数据。
我写这个作为一个例子,我不知道我想要实现的目标的正确语法。请在下面找到我的尝试。
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.* )
如果不存在
,这是使用 insert into 与 union all
的正确方法吗?
我发现了一些使用 select union all
where not办法
的示例,但我也希望看到一个使用 insert
的示例。
我也很好奇是否可以在不使用 merge 的情况下做到这一点。
最佳答案
您可以按照注释中的建议使用MERGE
,或者只是从现有值的总和中减去
。
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;
关于sql - 将所有与不存在的并入并插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33214983/