Как я могу установить значение по умолчанию в поле вставить в выбрать?

#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