2013-03-07 56 views
2

我正在使用select * into從另一個表創建表,並且使用SET IDENTITY_INSERT ON作爲新創建的表來接受包括標識列的數據。從現有表創建新表未使用要複製的標識屬性

現在我的問題是,有沒有辦法從另一個現有的表創建一個表(表說A)(表說B)與表B,以表A

+0

TABLE A最終應該是什麼樣子?它應該最終沒有IDENTITY列?它是否應該有一個不同的IDENTITY列?它是否應該具有相同的IDENTITY列但具有不同的值? – 2013-03-07 11:19:14

+0

表A應該有表B的標識列,即只有列應該出現標識屬性。如果Column1是表B中的標識列,那麼表A中的Shoud具有標識屬性爲 – 2013-03-07 11:28:44

回答

2

當然了複製標識屬性讓我們說TABLEA看起來是這樣的:

CREATE TABLE TABLEA (
    ID INT PRIMARY KEY IDENTITY(1, 1), 
    Column1 VARCHAR(50) 
) 

,讓我們假設TABLEB看起來是一樣的。如果我們想將數據從TABLEB進入TABLEA不動,標識列,我們可以寫成這樣的語句:

INSERT INTO TABLEA (Column1) 
    SELECT Column1 FROM TABLEB 

,這將導致在TABLEA每一個新行,以獲取其自己的身份價值。

但是請注意,您不能發出SELECT * FROM TABLEB,因爲這也會選擇ID列。你必須單獨列出你想要的所有字段。然而,一般來說,我認爲很多經驗豐富的DBA和程序員會說SELECT * FROM Table是非常危險的,因爲如果模式改變了所有的中斷。你真的想要總是是具體的。

+0

的那列但我必須在很多表上執行此操作,所以我不想在select語句中提及列列表(我只是想寫INSERT INTO TABLEA SELECT * FROM TABLE B)。 – 2013-03-07 11:14:44

+0

@SanthoshRamini,你不能這樣做,因爲你***不想要標識列***和'SELECT * FROM Table'將***恢復標識列***。 – 2013-03-07 11:16:53

0

SELECT STUFF((SELECT ' '+ c.name FROM SYS.COLUMNS c其中c.object_id = OBJECT_ID(' dbo.TABLE_NAME ')和c.is_identity <> 1 FOR XML PATH('')), 1,2,'')AS CSVCcolumn

這將給你一個逗號分隔的每個表的列的列表。將這些語句複製到記事本中以創建可以運行的腳本。