Скопируйте все записи из Таблицы1 в Таблицу2 и вставьте отдельные данные в Таблицу2. - PullRequest
0 голосов
/ 06 апреля 2020

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

CREATE PROCEDURE insert_t_p @t_p INT AS
BEGIN
    INSERT INTO table_2
    SELECT * FROM table_1
END

, где @t_p - данные, которые я хочу вставить. Это будет постоянным для всех копируемых записей. У кого-нибудь есть предложения?

Ответы [ 2 ]

3 голосов
/ 06 апреля 2020

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

INSERT INTO table_2 (col1, col2, . . . , col_extra)
    SELECT col1, col2, . . ., @t_p
    FROM table_1 ;

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

3 голосов
/ 06 апреля 2020

Я подозреваю, что вы хотите:

INSERT INTO table_2 SELECT *, @t_p FROM table_1

Обратите внимание, что вы действительно должны перечислять столбцы в insert и select, например:

INSERT INTO table_2(col1, col2, col3)
SELECT col1, col2, @t_p FROM table_1

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

...