我有一个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)
我确信这不是正确的语法,但我认为逻辑很明显。
如果记录不存在,我只需要插入记录。
答案 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