Как написать INSERT, если не существует запросов в SQL Server 2005 - PullRequest
1 голос
/ 21 мая 2011

Я соединяю две базы данных для переноса данных. Я хочу проверить, существует ли запись из таблицы первой базы данных во второй базе данных.

т.е. из исходной пользовательской таблицы базы данных Я хочу перенести данные в конечную пользовательскую таблицу базы данных.

Как написать запрос, если не существует?

Ответы [ 4 ]

4 голосов
/ 21 мая 2011
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

или в зависимости от вашей базы данных, слияние может быть лучше, есть много вариантов

3 голосов
/ 21 мая 2011

Мне легче читать следующий синтаксис:

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 голосов
/ 21 мая 2011

SQL2003 определяет MERGE, в противном случае вы можете сделать INSERT INTO ... SELECT и в SELECT вы должны LEFT JOIN в таблице назначения, используя естественный ключ в предикате ON итогда просто забей на WHERE <column> IS NULL.

0 голосов
/ 21 мая 2011
select * from db1.schema1.table1
intersect 
select * from db2.schema2.table2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...