2015-03-26 3 views
0

Я должен заполнить записи в новой базе данных. Старая схема выглядела следующим образом:Вставить записи базы данных в другом формате

+------------------------+----------+------+-----+---------+----------------+ 
| Field     | Type  | Null | Key | Default | Extra   | 
+------------------------+----------+------+-----+---------+----------------+ 
| id      | int(11) | NO | PRI | NULL | auto_increment | 
| trainee_id    | int(11) | NO | MUL | NULL |    | 
| date     | date  | NO |  | NULL |    | 
| duration    | int(11) | NO |  | NULL |    | 
| documentationReference | longtext | YES |  | NULL |    | 
| educationDepartment | longtext | YES |  | NULL |    | 
| completedtasks   | longtext | NO |  | NULL |    | 
| yearOfTraining   | int(1) | YES |  | NULL |    | 
+------------------------+----------+------+-----+---------+----------------+ 

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

INSERT INTO `report_completedtask` 
     VALUES (997, 
       3, 
      '2015-01-23', 
      8, 
      NULL, 
      'Netzwerk und Sicherheit', 
      'Berufsschule', 
      1); 

Но так как моя новая схема выглядит следующим образом:

+----------------------+----------+------+-----+---------+----------------+ 
| Field    | Type  | Null | Key | Default | Extra   | 
+----------------------+----------+------+-----+---------+----------------+ 
| id     | int(11) | NO | PRI | NULL | auto_increment | 
| trainee_id   | int(11) | NO | MUL | NULL |    | 
| task     | longtext | NO |  | NULL |    | 
| date     | date  | NO |  | NULL |    | 
| year_of_training  | int(11) | NO |  | NULL |    | 
| duration    | int(11) | YES |  | NULL |    | 
| documentation  | longtext | YES |  | NULL |    | 
| education_department | longtext | YES |  | NULL |    | 
+----------------------+----------+------+-----+---------+----------------+ 

мне нужно бы следующая структура вставки:

INSERT INTO `report_completedtask` 
    VALUES (997, 
      3, 
      'Netzwerk und Sicherheit', 
      '2015-01-23', 
      1, 
      8, 
      NULL, 
      'Berufsschule'); 

Вот настоящая проблема: У меня есть огромный файл со старыми записями, который имеет более 1000 строк. Есть ли способ, которым я могу изменить их все для новой схемы и изменить файл?

Edit: я взял подход dan08 сейчас и объединили его с простой VI команды:

:%s/VALUES/(id,trainee_id,date,duration,documentation,education_department,task,year_of_training) VALUES/g 

Иногда это просто слишком просто: D

ответ

2

Вы знаете, что вы можете задавать столбцы для вставки в , Пример

INSERT INTO my_table (col_a, col_c, col_b) VALUES ('a', 'c', 'b'); 

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

Вы также можете вставить несколько строк сразу, как так:

INSERT INTO my_table (col_a, col_c, col_b) VALUES 
    ('a', 'c', 'b'), 
    ('b', 'c', 'a'), 
    ... , 
    ('b', 'a', 'c'); 
+0

Но как я могу заставить его работать, поэтому мне не нужно делать это вручную для более 1000 строк инструкций вставки? – ZedsWhatSheSaid

+0

Нет проблем, см. Мое редактирование. – dan08

0

Я не знаю вашего SGBD но с оракула вы можете сделать что-то вроде этого:

INSERT INTO tbl_temp2 (fld_id) 
SELECT tbl_temp1.fld_order_id 
FROM tbl_temp1 
WHERE tbl_temp1.fld_order_id > 100; 

В вашей Я рекомендую вам написать блок PL/SQL, которым ваш SGBD управляет им.

Другая возможность, если вы не хотите возиться с кодом вы можете использовать Talend прочитать файл и вставить свои данные!

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