1

我正在执行大量从详细表到 SQL Server 中的汇总表的插入操作。我目前正在使用 LEFT OUTER JOIN 来确定明细表中的行在插入之前是否已存在于汇总表中,如下例所示:

INSERT INTO TableA
       (columnA
       ,columnB
       ,columnC)
SELECT 
    b.columnA, 
    b.columnB, 
    b.columnC
FROM TableB b
    LEFT OUTER JOIN TableA a
        on a.columnA = b.columnA
WHERE
    a.columnA IS NULL 

我发现即使没有要插入的行,此方法也会花费大量时间,因为它必须比较所有行以确定已经存在的行。在这种情况下,我通常会考虑添加一个标志来TableB说明已插入哪些行。

然而,有几种不同的场景TableB可以插入一行,TableA这需要几个标志,我不希望使用存储空间,因为TableB它非常大并且越来越大。

感谢您的任何建议。

4

1 回答 1

3
INSERT INTO TableA (columnA, columnB, columnC)
SELECT 
    b.columnA, 
    b.columnB, 
    b.columnC
FROM TableB as b
where not exists (select 1 from TableA as xx where xx.columnA = b.columnA) ;
于 2012-06-29T16:33:56.353 回答