2015-08-18 40 views
2

我想創建一個與某些現有表相同的新表以及一些附加列。在簡單的情況下,我們將這樣做:從另一個表中創建表(Sql Server)

Select * INTO table2 from table1 where 1=0 

但我也想添加一些新的列。我們能否一步完成,即不用ALTER TABLE作爲下一步?

+0

新列值是否來自舊錶格列? – DhruvJoshi

+0

請注意,如果這是一種可以多次運行的過程,那麼創建新表格並不是一種好方法。只選擇一次作品。也沒有索引/ PK/FKS不會創建新表的新表。按照這種方式創建它時按照表格。標識字段將轉到新表。所以你可能需要明確地創建這些東西,如果你需要它們。 – HLGEM

回答

3

是的,但爲了指定數據類型,您應該將null作爲所需的類型。

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

INTO B 
FROM A 
WHERE 1=0 

列約束/默認將需要通過更新TABLE語句單獨添加,但他們可能沒有必要爲你正在嘗試做的。

列類型肯定會是。

+1

空將自動轉換爲整數,因此如果您最終將填充其他類型的數據,則需要將其轉換爲整數。我很難學會這一點! – HLGEM

1

您能明確列出SELECT語句中的新列嗎?他們需要填充還是隻有空的領域?像

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

東西雖然你可能要列出所有從原來的表,而不是*單獨列了。

+1

可能希望'作爲ColumnName'投射(null作爲類型)來控制列的類型。 –

+0

好趕上!更新... –

0

你可以做以下中:

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

是的,你可以做到這一點

選擇*, '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

相關問題