Интересует практика, так что 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 нет). А инога за пару секунд все вставляется