插入缺失的记录

时间:2013-12-26 18:07:19

标签: sql sql-server-2008 sql-insert

我有一个sql server 2008 r2表,其中包含已由单独程序更新的数千条记录。由于疏忽,有一系列缺失的记录。我需要将丢失的记录插入数据库。如果记录存在(ANumber和Stage匹配可能缺失记录的表),则转到下一条记录,如果不存在则插入记录(ANumber,Stage,field3到field10。)

我想做的是先创建缺失的记录表(字段1-10)。将表命名为tbMissRec。我现有的表是MstrAnno。

这是我不确定语法的地方。我见过合并命令,但我想到的是那种逻辑

If (tbMissRec.ANumber = MstrAnno.ANumber) and (tbMissRec.Stage =
MstrAnno.Stage) then Else insert into MstrAnno
tbMissRec.ANumber,tbMissRec.Stage, etc)

我确信这不是正确的语法,但我认为逻辑很明显。

如果记录不存在,我只需要插入记录。

2 个答案:

答案 0 :(得分:2)

这应该做:

INSERT INTO MstrAnno
SELECT *
FROM tbMissRec A
WHERE NOT EXISTS(SELECT 1 FROM MstrAnno
                 WHERE ANumber = A.ANumber 
                 AND Stage = A.Stage)

答案 1 :(得分:1)

我更喜欢这种格式,因为很容易注释掉插入并验证要插入的数据。此外,您应在插入中指定列名并选择。

INSERT INTO MstrAnno (ANumber,Stage)
    SELECT A.ANumber,A.Stage
    FROM tbMissRec A
    LEFT JOIN MstrAnno B ON B.ANumber = A.ANumber AND B.Stage = A.Stage
    WHERE B.ANumber IS NULL