TSQL仅将新内容复制到存档表

时间:2016-05-02 17:59:52

标签: sql-server tsql copy archive

我有一个ArchiveTable,我想定期从OriginalTable复制任何新记录。这是我认为可行的。

INSERT INTO OriginalTable 
    SELECT * 
    FROM ArchiveTable 
    WHERE NOT EXISTS (SELECT * 
                      FROM OriginalTable ot 
                      INNER JOIN ArchiveTable at ON ot.email = at.email)

简单地做一些像......

INSERT INTO ArchiveTable 
    SELECT * FROM OriginalTable

当然,只适用于初始副本。

1 个答案:

答案 0 :(得分:1)

您当前的疑问:

INSERT INTO OriginalTable 
SELECT * FROM ArchiveTable 
WHERE NOT EXISTS 
(SELECT * FROM OriginalTable ot 
INNER JOIN ArchiveTable at 
ON ot.email = at.email)

使用与外部查询无关的EXISTS子查询。所以它说,“如果原始表中没有与存档表中任何行具有相同电子邮件的行,则将存档表中的所有内容插入到原始表中。”

可能不是你想要的。您可能希望插入原始表中尚不存在的特定行。因此,您需要将子查询与外部查询相关联:

INSERT INTO OriginalTable  
SELECT * FROM ArchiveTable at
WHERE NOT EXISTS 
(SELECT * FROM OriginalTable ot 
WHERE ot.email = at.email)

此查询说,“在原始表格中插入归档表格中我还没有原始表格中的电子邮件的任何行”。