如何在SQL Server 2005中编写INSERT IF NOT EXISTS查询

时间:2011-05-21 10:48:21

标签: sql sql-server sql-server-2005

我正在连接两个数据库以进行数据迁移。我想检查第二个数据库中是否存在第一个数据库表中的记录。

即。从源数据库用户表我想将数据迁移到目标数据库用户表。

如果不存在,如何编写查询?

4 个答案:

答案 0 :(得分:4)

insert into myTable
select * from myOldTable ot
where NOT EXISTS (select 1 from mytable t where t.ID = ot.ID)

您可能最好将其编写为连接

insert into myTable
select ot.*
from myOldTable ot
LEFT JOIN mtTable t
ON ot.ID = t.ID
WHERE t.ID IS NULL

或者根据您的数据库,合并可能会更好,有很多选项

答案 1 :(得分:3)

我发现以下语法最容易阅读:

insert  TargetTable
        (col1, col2)
from    SourceTable as source
where   not exists
        (
        select  *
        from    TargetTable as duplicate
        where   source.col1 = duplicate.col1
                and source.col2 = duplicate.col2
        )

通常,您不必担心数据迁移期间的并发性。如果这样做,您可以指定锁定提示,例如with (tablock)或更高transaction isolation level。或者您可以按照建议使用merge,但这有一个相当复杂的语法。

答案 2 :(得分:2)

SQL2003定义MERGE,否则你可以使用{{1中的自然键在目标表中INSERT INTO ... SELECT SELECT LEFT JOIN进行ON }谓词,然后只是放在WHERE <column> IS NULL

答案 3 :(得分:0)

select * from db1.schema1.table1
intersect 
select * from db2.schema2.table2