В хранимой процедуре для строки, которая будет добавлена в базу данных, сначала проверьте, присутствует ли строка в таблице.Если это присутствует, UPDATE
это, иначе INSERT
это.В SQL 2008 также есть команда MERGE
, которая, по сути, объединяет обновление и вставку.
С точки зрения производительности RBAR (строка за агонизирующей строкой) довольно неэффективна.Если скорость является проблемой, вам нужно изучить различные процессы «вставка сразу нескольких строк»: BULK INSERT, утилита bcp и пакеты служб SSIS.У вас все еще есть или / или проблема, но по крайней мере она будет работать лучше.
Редактировать:
Массовая вставка данных в пустую таблицу легко.Массовая вставка новых данных в непустую таблицу очень проста.Массовая вставка данных в таблицу, где некоторые данные (как, по-видимому, определяется первичным ключом) уже присутствуют, является сложной задачей.Увы, конкретные шаги детализируются быстро и очень зависят от вашей системы, кода, структур данных и т. Д. И т. Д.
Основные шаги, которые необходимо выполнить: - создать временную таблицу - загрузить данные во временнуютаблица - Сравните содержимое временной таблицы с содержимым целевой таблицы - Там, где они совпадают (старые данные), ОБНОВЛЕНИЕ - Там, где они не совпадают (новые данные), INSERT
Я сделал быстрый поиск поТАК для других постов, которые освещали это и наткнулись на то, о чем я никогда не думал.Попробуйте это ;он не только будет работать, но и элегантен.