Вставка строки в таблицу для каждого ID из другой таблицы
У меня возникла проблема, с которой я не смог найти аналогичное решение на StackOverflow, и хотел бы узнать, как лучше всего решить эту задачу.
У меня есть таблица с более чем 17 миллионами строк, каждая из которых имеет уникальный идентификатор. Мы недавно создали новую таблицу, которая будет использоваться вместе с предыдущей таблицей, где внешний ключ новой таблицы — это уникальный идентификатор старой таблицы.
Пример: Таблица 1 - id, field1, field2, field3... Таблица 2 - table1.id, field1...
Проблема в том, что мы мигрируем данные в рабочую среду, и нам нужно заполнить таблицу 2 строками, содержащими id из таблицы 1 для каждой строки в таблице 1. К примеру, если в таблице 1 есть строка: 1, test, null, то в таблице 2 теперь должно быть: 1, null... и так далее для каждой строки в таблице 1. Основная проблема в том, что идентификаторы в таблице 1 не являются последовательными, поэтому нам нужно читать данные из таблицы 1 и затем вставлять информацию в таблицу 2 на основе найденного id.
Есть ли более простой способ решить эту задачу?
Также хочу уточнить, что таблица 2 будет содержать новые данные, и единственное, что она будет заимствовать из таблицы 1, — это id для поддержания связи внешнего ключа.
И еще, это SQL Server 2000.
2 ответ(ов)
Если я правильно вас понимаю, вы хотите, чтобы для каждой записи в table1 в table2 была создана одна запись. Я также полагаю, что кроме ссылки на table1, table2 изначально должна содержать пустые строки.
Предположим, что у вас есть следующие таблицы:
table1 (ID, field1, field2, ...)
table2 (ID, table1_ID, fieldA, fieldB, ...)
-- где table1_ID является ссылкой на поле ID в table1
После создания table2 вы можете просто выполнить следующий оператор вставки:
insert into table2(table1_ID)
select ID from table1
Этот запрос вставит в table2 значения ID из table1, создавая таким образом по одной записи в table2 для каждой записи в table1. Не забудьте, что при этом другие поля fieldA и fieldB в table2 останутся пустыми, так как они не указаны в операторе INSERT
.
Не совсем уверен, что я правильно вас понимаю, но подойдет ли вам что-то вроде этого?
INSERT INTO table2 (SELECT field1, field2, field3 FROM table1);
Если я правильно понял, вы хотите, чтобы в table2
был создана запись для каждой записи из table1
. Этот запрос именно это и сделает. Просто сопоставьте поля в SELECT
в нужном порядке и укажите константы для любых полей в table2
, которые отсутствуют в table1
.
Надеюсь, это поможет. Если я неправильно вас понял, дайте знать, и я постараюсь помочь ещё раз.
"Вставка результатов хранимой процедуры в временную таблицу"
Как экранировать одинарную кавычку в SQL Server?
Как выполнить оператор UPDATE с JOIN в SQL Server?
Возможно ли задать условия в Count()?
Создание хранимой процедуры, если она еще не существует