#sql #sql-server #tsql
Вопрос:
Привет, у меня есть таблица, и я хочу скопировать эту таблицу в другую таблицу, но я хочу добавить новый столбец в скопированную таблицу. Этот новый столбец должен иметь то же значение, что и 1.
Это пример исходной таблицы.
pk_id | идентификатор пользователя | идентификатор транспортного средства | тип отношения | дата окончания |
---|---|---|---|---|
1 | 100 | 200 | 1 | нулевой |
2 | 100 | 200 | 1 | нулевой |
3 | 100 | 200 | 1 | нулевой |
4 | 100 | 200 | 1 | нулевой |
Это ожидаемый результат.
статус дела | pk_id | идентификатор пользователя | идентификатор транспортного средства | тип отношения | дата окончания |
---|---|---|---|---|---|
1 | 1 | 100 | 200 | 1 | нулевой |
1 | 2 | 100 | 200 | 1 | нулевой |
1 | 3 | 100 | 200 | 1 | нулевой |
1 | 4 | 100 | 200 | 1 | нулевой |
Это моя исходная таблица scrpit.
create table #Result
(
pk_id INT IDENTITY(1,1),
fk_customer_id INT,
fk_vehicle_id INT,
relation_type SMALLINT,
end_date DATETIME,
)
Это мой целевой сценарий создания таблицы. Я попробовал ПО УМОЛЧАНИЮ 1, но не работает.
create table #Resultt
(
case_status INT DEFAULT 1,
pk_id INT IDENTITY(1,1),
fk_customer_id INT,
fk_vehicle_id INT,
relation_type SMALLINT,
end_date DATETIME,
)
И это вставка в запрос select.
insert into #Resultt select * from #Result
Комментарии:
1. ФУ, это бы сработало, если бы вы явно перечислили столбцы
2. Если бы это были физические таблицы, вы могли бы сделать систему таблиц результатов версионной. Затем обновление case_status создаст нумерованный снимок всех строк, и вы сможете накопить историю
Ответ №1:
Вы должны перечислить столбцы, но вы можете сделать:
insert into #Resultt
select 1, r.*
from #Result r;
Тем не менее, я рекомендую быть откровенным:
insert into #Resultt (case_status, pk_id, customer_id, vehicle_id, relation_type, end_date)
select 1, r.pk_id, r.customer_id, r.vehicle_id, r.relation_type, r.end_date
from #Result r;
Ответ №2:
Это должно сделать это, я верю
SELECT 1 as 'case_status', OLDTABLE.* INTO NEWTABLE FROM OLDTABLE
Ответ №3:
если вам нужны те же самые точные значения, вы можете изменить свою таблицу #Resultt на эту:
create table #Resultt
(
case_status INT DEFAULT 1,
pk_id INT,
fk_customer_id INT,
fk_vehicle_id INT,
relation_type SMALLINT,
end_date DATETIME,
)
и вы можете вставить в эту таблицу вот так:
insert into #Resultt
select 1, r.*
from #Result r;
Идентификатор во второй таблице не позволит вам вставить точно такое же значение из pk_id