Insert дубликатов, как лучше? (MS SQL)
От: rFLY  
Дата: 05.06.15 11:12
Оценка:
Интересует практика, так что MS это или другой сервак, не важно.
Задача такая, получить данные с удаленного сервера, и каждую запись дважды (с небольшими изменениями) вставить в таблицу. Как реализовано на данный момент:
;with source as
(
    select f1 from [server].[table]
)
-- Вставляем первый раз, если в итоговой таблицы нет такой записи (это внутренняя проверка она не относится к вопросу, а просто нуна)
INSERT INTO destination (f1, f2)
    OUTPUT INSERTED.f1 INTO @affected (f1)
SELECT s.f1, 0 as f2 FROM source as s WHERE NOT EXISTS (SELECT NULL FROM destination WHERE f1=s.f1)

-- Вставляем дубликат с измененным значением по второму полю
INSERT INTO destination/*в предыдущей версии сообщения ошибся, написав t*/ (f1, f2) 
SELECT d.f1, 1 AS f2
FROM destination as d WHERE EXISTS(SELECT NULL FROM @affected WHERE f1 = d.f1);

Иногда хранимка отваливается по таймауту выполнив только первый инсерт (то есть все записи с f2=0 в destination появляются, а вот с f2=1 нет). А инога за пару секунд все вставляется
Отредактировано 05.06.2015 11:29 rFLY . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.