我正在使用select * into
從另一個表創建表,並且使用SET IDENTITY_INSERT ON
作爲新創建的表來接受包括標識列的數據。從現有表創建新表未使用要複製的標識屬性
現在我的問題是,有沒有辦法從另一個現有的表創建一個表(表說A)(表說B)與表B,以表A
我正在使用select * into
從另一個表創建表,並且使用SET IDENTITY_INSERT ON
作爲新創建的表來接受包括標識列的數據。從現有表創建新表未使用要複製的標識屬性
現在我的問題是,有沒有辦法從另一個現有的表創建一個表(表說A)(表說B)與表B,以表A
當然了複製標識屬性讓我們說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
是非常危險的,因爲如果模式改變了所有的中斷。你真的想要總是是具體的。
的那列但我必須在很多表上執行此操作,所以我不想在select語句中提及列列表(我只是想寫INSERT INTO TABLEA SELECT * FROM TABLE B)。 – 2013-03-07 11:14:44
@SanthoshRamini,你不能這樣做,因爲你***不想要標識列***和'SELECT * FROM Table'將***恢復標識列***。 – 2013-03-07 11:16:53
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
這將給你一個逗號分隔的每個表的列的列表。將這些語句複製到記事本中以創建可以運行的腳本。
TABLE A最終應該是什麼樣子?它應該最終沒有IDENTITY列?它是否應該有一個不同的IDENTITY列?它是否應該具有相同的IDENTITY列但具有不同的值? – 2013-03-07 11:19:14
表A應該有表B的標識列,即只有列應該出現標識屬性。如果Column1是表B中的標識列,那麼表A中的Shoud具有標識屬性爲 – 2013-03-07 11:28:44