|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
импорт данных из dbf (очень больная) в sql server
Всем добрый день!
Следующая задача: необходимо организавать импорт данных из таблицы dbf в sql server. Проблема состоит в том, что dbf таблица очень большая - 1,5 Гб. Когда я пытаюсь загрузить ее в sql server через BDE, то таблица загружается, но при просмотре в sql server-е она оказывается не вся, а примерно половина записей dbf таблицы, а если я ее загружаю через ODBC драйвер, то во время загрузки, программа начинает увеличивать используемую память и в итоге программа во время загрузки натыкается на сообщение об исчерпании виртуальной памяти (примерно через пол часа работы на пеньке 3Ггц и 2 Гб оперативной памяти, 1 или 2 Гб виртуальной). Загрузку провожу таким путем: ADOCommand1.CommandText:= 'INSERT Polis VALUES ('''+ t_polis.FieldByName('smo').AsString+''','''+ t_polis.FieldByName('polis_s').AsString+''','''+ t_polis.FieldByName('polis_n').AsString+''','+ datn_new+','+ datk_new+','''+ t_polis.FieldByName('fam').AsString+''','''+ t_polis.FieldByName('im').AsString+''','''+ t_polis.FieldByName('otch').AsString+''','+ datr_new+','''+ t_polis.FieldByName('pol').AsString+''','''+ t_polis.FieldByName('snils').AsString+''','''+ t_polis.FieldByName('pr_rab').AsString+''','''+ t_polis.FieldByName('mrab').AsString+''','''+ t_polis.FieldByName('innrab').AsString+''','''+ t_polis.FieldByName('kpprab').AsString+''','+ IntToStr(t_polis.FieldByName('sost').AsInteger)+', '+ d_input_new+','''+ t_polis.FieldByName('okved').AsString+''')'; ADOCommand1.Execute; Подскажите пожалуйста как можно обойти такую ситуацию. У нас есть программа стороннего разработчика, которая выполняет такой импорт и при этом никаких подобных сообщений не выскакивает и еще, когда я запускаю импорт в программе стороннего разработчика, открывал диспетчер задач и увидел, что во время загрузки программа этого разработчика не грузит процессор, а грузится sqlserver. А когда я в своей программе запускаю импорт, то почти весь процессор загружает моя программа и при этом постоянно увеличивает использование виртуальной памяти. У кого есть какие предложения, буду рад услышать. |
#2
|
|||
|
|||
Как вариант можно сформировать скрипт из dbf (а не по одной записи вытягивать), а после его проиграть на sql server, желательно разбить скрипт по записей 500 и заключить их в begin tran .. commit go
Формировать сам скрипт одним запросом, к примеру: Код:
select 'insert into dest_table (n1, n2) values ('+st.n1+','+st.n2+');' from src_table st Код:
... insert into dest_table(n1, n2) values (1,1); insert into dest_table(n1, n2) values (2,2); insert into dest_table(n1, n2) values (3,3); ... Код:
... begin tran insert into dest_table(n1, n2) values (1,1); insert into dest_table(n1, n2) values (2,2); insert into dest_table(n1, n2) values (3,3); commit go ... |
#3
|
||||
|
||||
Есть несколько решений. Я бы выбрал самое быстрое, как мне кажется. Импортируем средствами самого sql-сервера, там для этого есть великолепный инструмент. А уже после импорта перекидываем данные из таблицы в таблицы на самом сервере. На порядок быстрее и проще будет.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
|||
|
|||
Цитата:
|
#5
|
|||
|
|||
Цитата:
|
#6
|
||||
|
||||
Вообще эта вещь называется DTS (Data transformation service)
Там есть хороший мастер, котороый позволит вам быстренько перекинуть данные. Форматов он поддерживает кучу. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
Цитата:
|