2015-08-18 4 views
2

Я хочу создать новую таблицу так же, как и существующую таблицу плюс некоторые дополнительные столбцы. В простом случае мы сделаем так:Создать таблицу из другой таблицы. (Sql Server)

Select * INTO table2 from table1 where 1=0 

Но я также хочу добавить несколько новых столбцов. Можем ли мы сделать это за один шаг, то есть без использования ALTER TABLE в качестве следующего шага?

+0

Являются ли новые значения столбцов, полученные из старых столбцов таблицы? – DhruvJoshi

+0

Имейте в виду, что это не лучший способ создать новую таблицу, если это какая-то процедура, которая будет запускаться несколько раз. Выбирается только один раз. Также никакие индексы/PKs/Fks не будут созданы для новой таблицы новой таблицы. следуйте за таблицей, когда создадите ее таким образом. Поля идентичности перейдут в новую таблицу. Таким образом, вы можете явно создавать эти вещи, если они вам понадобятся. – HLGEM

ответ

3

Да, но для указания типов данных вы должны указывать нуль как нужный тип. Ограничения

SELECT * 
, CAST(NULL as NVARCHAR(100)) as NewColumn1 
, CAST(NULL as INT) as NewColumn2 

INTO B 
FROM A 
WHERE 1=0 

Column/по умолчанию должны быть добавлены отдельно с помощью оператора UPDATE TABLE, но они не могут быть необходимы для того, что вы пытаетесь сделать.

Типы столбцов конечно будут.

+1

Null будет автоматически отбрасываться как целое число, так что да, если вы в конце концов заполните это каким-то другим типом данных, вам нужно это сделать. Я усвоил этот трудный путь! – HLGEM

1

Можете ли вы явно указать новые столбцы в инструкции SELECT? Нужно ли их заполнять или у вас просто пустое поле? Что-то вроде

Select *, cast(NULL as type) as NewColumn1, cast(NULL as type) as NewColumn2... INTO table2 from table1 where 1=0 

Хотя вы, возможно, придется перечислить все отдельные столбцы из исходной таблицы, а не * тоже.

+1

Вероятно, хотите, чтобы 'cast (null as type) как ColumnName' определял тип столбца. –

+0

Хорошая добыча! Обновлено ... –

0

Вы можете сделать это в следующем:

SELECT *, 
     '' AS Col2, -- Here you can specify you new columns 
     '' AS Col3 --------------------------------------- 
INTO table2 
FROM table1 
0

Да, вы можете сделать это

Select *, 'ABC', как город в dbo.newtable от dbo.oldtable где 1 = 0

0

Если вы хотите добавить больше columns добавить те в select заявлении: например:

select 
    t.*, 
    12 as ID, 
    'ABCD' as Name 
INTO table2 
from table1 as t 
where 1 = 0 

После creation сделать execute sp_columns 'table2', чтобы увидеть определение таблицы, как вы ожидали.
Здесь Name колонка будет иметь тип varchar длины 4.

Смежные вопросы