Подтвердить что ты не робот

Вставить строку в таблицу для каждого идентификатора в другой таблице

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

У меня есть таблица с 17 миллионами + строк, у всех есть уникальный идентификатор. Недавно мы создали новую таблицу, которая будет использоваться вместе с предыдущей таблицей, где внешний ключ новой таблицы является уникальным идентификатором старой таблицы.

Например,
Таблица 1 - id, field1, field2, field3... таблица 2 - table1.id, field1...

Проблема в том, что мы переносим это в живую среду, нам нужно вернуть таблицу заполнения 2 строкой, содержащей идентификатор из таблицы 1 для каждой строки в таблице 1. ex, table 1 - 1, test, null таблица 2 теперь должна иметь: 1, null,... и так далее для каждой строки, которая находится в таблице1. Основная проблема заключается в том, что идентификаторы не все являются последовательными в таблице 1, поэтому нам придется читать из таблицы 1, а затем вставлять на основе идентификатора найденного в таблицу 2.

Есть ли более простой способ сделать это? заранее спасибо Джо

Также, чтобы уточнить, таблица 2 будет новыми данными, и единственное, что она будет содержать из таблицы 1, - это идентификатор для сохранения отношения внешнего ключа

Также это SQL Server 2000

4b9b3361

Ответ 1

Вам необходимо прочитать эту статью.

Каковы наиболее распространенные анти-шаблоны SQL?

Основная проблема заключается в том, что идентификаторы не все являются последовательными в таблице 1, поэтому нам придется читать из таблицы 1, а затем вставлять на основе идентификатора найденного в таблицу 2

Да, посмотрите на мой ответ в приведенной выше статье и напишите цикл перехода по клавише, используя элемент № 2.

Убедитесь, что, когда вы пишете инструкцию insert, вы предоставляете список полей - как я уже сказал в пункте № 1.

Ответ 2

Если я правильно понял, вам нужна одна запись в таблице2 для каждой записи в таблице1. Также я считаю, что помимо ссылки на таблицу1, таблица2 должна содержать пустые строки.

Итак, предполагая

table1 (ID, field1, field2, ...)
table2 (ID, table1_ID, fieldA, fieldB,...)
-- where table1_ID is a reference to ID of table1

После создания таблицы2 вы можете просто запустить этот оператор insert

insert into table2(table1_ID) 
select ID from table1

Ответ 3

Я не уверен, что я точно следую за тобой, но что-то вроде этой работы для тебя?

INSERT INTO table2 ( SELECT field1, field2, field3... FROM table1 )

Если я правильно понимаю, вам нужна запись в таблице2 для каждой записи в таблице1. Это сделает именно это. Просто сопоставьте свои поля в списке в правильном порядке и укажите константы для любых полей таблицы2, которые у вас нет в таблице1.

НТН. Дайте мне знать, если я не понимаю, и я попытаюсь снова помочь.

Ответ 4

С этим количеством строк вы можете столкнуться с проблемами с пространством журнала транзакций и продолжительностью больших транзакций вставки.

Если время выполнения - это ограничение, я бы серьезно рекомендовал использовать Bcp (или какой инструмент применим в зависимости от платформы)

Выделите идентификатор из исходной таблицы, используйте это, чтобы построить файл Bcp для таблицы расширений, затем Bcp it in.

Многие из вас считают, что он более эффективен для Bcp в файлах из 10 000 записей вместо одного файла humungus с 17 000 000 строк.

Кроме того, вы можете сделать это на заднем плане перед тем, как начать жить, и написать задание t-sql, которое нужно было бы забрать, и которые, возможно, были вставлены после того, как вы взяли снимок id.