Я дам псевдопример кода своего существующего метода и если кто-либо знает о методе, который не работает одна строка за один раз, я был бы довольно благодарен. Я использую SQL Server MS 2008.
define cursor for the data to be inserted (about 3 million records)
loop
(
insert record into table 1
use scope_identity() to get key
insert record into table 2 that references table 1
)
Я очень сделал бы своего рода вставку в обе таблицы одновременно, потому что курсор и цикл являются медленными.
Прежде чем любой будет разглагольствовать о том, почему я вставляю что-то в две отдельных таблицы, которое имеет от 1 до 1 отношения, это - потому что первая таблица не может быть изменена, и мне нужна информация во второй (временной) таблице для ссылки для операций преобразования данных позже.
Нет, я не могу добавить временный столбец для держания справочных данных к таблице, которая не может быть изменена, потому что это не может быть изменено. Это - живая система, и у меня нет полномочий изменить таблицу.
Спасибо!
Дополнительная информация:
Исключая
Source:
1 a big monkey
2 a tall elephant
3 a big giraffe
4 a tiny cow
5 a tall cow
Dest:
Table 1 Table 2
monkey 1 big
elephant 2 tall
giraffe 3 big
cow 4 tiny
cow 5 tall
При таком большом количестве данных лучшим вариантом может быть изоляция обновлений в системе, разрешение вставки идентификаторов
и предварительная сварка ключей перед вставкой.
Или вы можете просто сделать первую вставку, а затем изменить вставку для второй (из временной таблицы), чтобы присоединиться к исходным данным и найти ключ.