2015-08-18 3 views
3

Мне была задана задача вставить более 1000 строк с 4 столбцами. В рассматриваемой таблице нет PK или FK. Предположим, что он содержит столбцы ID, CustomerNo, Description. Записи, которые необходимо вставить, могут иметь одинаковые значения CustomerNo и Description.SQL-пакетная вставка, избегать дубликатов, нет PK

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

У меня также могло быть 1000 запросов, которые проверяют, существует ли такая запись, и вставлять данные, если это не так. Но я слишком стыжусь, чтобы попробовать это по понятным причинам.

Я не ожидаю какого-либо конкретного кода, потому что я не дал никаких конкретных подробностей. На что я надеюсь - это некоторые псевдокоды или общие рекомендации для выполнения таких задач. Я не могу дождаться, чтобы дать хоть что-нибудь!

+6

* Если у него нет первичного ключа - это не таблица * - добавьте ПК! –

+0

Какое требование при обнаружении дубликатов? (1) Вся партия должна завершиться неудачей, (2) Вставлять только те строки, которые не являются дубликатами, (3) Только одна строка, выбранная случайным образом, должна быть вставлена ​​для каждого дубликата, (4) Только одна строка, основанная на определенных критериях (например, самая низкая победа CustomerNo), следует вставлять за один дубликат –

ответ

2

Итак, идея состоит в том, что вы не хотите вставлять запись, если уже есть запись с тем же идентификатором?

Если да, то после того, как импортировать данные во временную таблицу, вы можете сделать то, что вы ищете в пункте избранного заявления where:

insert into table 
    select ID, CustomerNo, Description from #data_source 
    where (#data_source.ID not in (select table.ID from table)) 
0

Я бы предложил вам загрузить данные в таблицу temp или таблицу переменных. Затем вы можете сделать «Select Into» с помощью отдельного ключевого слова, которое удалит дублированные записи.

0

вы всегда должны прочитать цель table, если вы не загружаете целевую таблицу в таблицу temp (в этом случае у вас есть две таблицы temp), сравните оба варианта, устраните дубликаты и затем вставьте их в целевую таблицу, но даже это неточно, потому что вы можете иметь новую вставку в целевой таблице, пока вы это делаете.

Смежные вопросы