2013-07-10 3 views
0

Массовая вставка 3 текстовых файлов, каждая из которых содержит 1 записи lac в таблице test1.Массовая вставка в SQL Server 2005

Каждый из трех файлов имеет фирменный код и фолио. Если compcode и folio уже существуют в таблице test1, я должен обновить таблицу этой конкретной записью из текстового файла, иначе вставьте его.

Но мой запрос занимает много времени. test1 таблица имеет 70 столбцов

MMY логика:

  1. импорт данных в фиктивной таблице
  2. сравнивать каждую строку манекена с test1 столом
  3. if exists (select * from #dummy , test1 where condition) 
    begin 
        update test1 
        set col = (#dummy.col).. 
        inner join #dummy on (condition) 
    end 
    
  4. else insert 
    

Поскольку записи находятся в lacs более 30 минут. подтвердить запрос?

+0

Как ты сравнения строка фиктивного стола с таблицей test1? –

+0

Условие = # dummy.companycode + # dummy.folio = test1.companycode + test1.folio –

ответ

0

Я предполагаю, что вы используете BULK INSERT для вставки данных во временную таблицу или можете импортировать их с помощью мастера импорта в SQL Server. После этого вы можете использовать ниже запросы.

Даже если у вас есть if(exist), он обновит только строки, которые существуют в обеих таблицах. Так удалить, если еще и писать запросы непосредственно, как показано ниже:

update test1 
set col = (#dummy.col).. 
from test1 
inner join #dummy on (test1.companycode =#dummy.companycode and test1.folio = #dummy.companycode) 

Для вставки записи, которая не выходит в test1, вы могли бы использовать левое соединение, как показано ниже:

Insert into test1 
select column names 
from 
#dummy left join test1 
on test1.companycode =#dummy.companycode and test1.folio = #dummy.companycode 
where test1.companycode is null 
and test1.folio is null 
+0

nil я проведу решение и дам вам знать и время. –

+0

nil его прием в то же время, что и раньше, я импортировал первый файл из 25 тысяч записей, которые он вставил быстро, но второй файл, имеющий 10 тысяч записей, занял бесконечные минуты, я отменил операцию через 45 минут. Также есть ли еще одна логика для этого обновления и вставка –

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