2013-05-27 77 views
16

我有這樣的SQL表插入記錄到SQL表IDENTITY列

CREATE TABLE Notes(
    NoteID [int] IDENTITY(1,1) NOT NULL, 
    NoteTitle [nvarchar](255) NULL, 
    NoteDescription [nvarchar](4000) NULL 
) CONSTRAINT [PK_Notes] PRIMARY KEY CLUSTERED 
(
    NoteID ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

,我想從一個臨時表包括NoteID複製記錄(使用SQL查詢)..

這是我的腳本:

SET IDENTITY_INSERT Notes OFF 

INSERT INTO Notes (NoteID, NoteTitle,NoteDescription) 
SELECT NoteID, NoteTitle,NoteDescription from Notes_Temp 

SET IDENTITY_INSERT Notes ON 

這個劇本,我發現了一個錯誤:

Cannot insert explicit value for identity column in table 'Notes' when IDENTITY_INSERT is set to OFF. 

是否有其他方式插入記錄到具有標識列的表使用sql查詢?

回答

24

更改關上沿

SET IDENTITY_INSERT Notes ON 

INSERT INTO Notes (NoteID, NoteTitle,NoteDescription) 
SELECT NoteID, NoteTitle,NoteDescription from Notes_Temp 

SET IDENTITY_INSERT Notes OFF 
+0

謝謝@astander。當我試過這個,我有另一個錯誤:「列名或提供的值的數量不匹配表定義。」 – Eytch

+1

哎呀!從來沒有想過我的評論,我做了一個愚蠢的事情,我提到的錯誤是爲我的腳本的另一行..無論如何,改變關閉和ON周圍確實解決了我的問題,非常感謝 – Eytch

2

大概你正在使用SQL Server(你不說)和誤解的意義和目的IDENTITY_INSERT。通常,不允許顯式設置IDENTITY列的值,但通過將IDENTITY_INSERT設置爲ON可以臨時允許這樣的插入。

+0

嗯,謝謝@oldpro ..我想我的確誤解了IDENTITY_INSERT的用途。多麼可恥......但是再次讓我嘗試將它設置爲ON – Eytch

6
SET IDENTITY_INSERT Notes ON 

INSERT INTO Notes 
/*Note the column list is REQUIRED here, not optional*/ 
(NoteID, NoteTitle,NoteDescription) 
SELECT NoteID, NoteTitle,NoteDescription from Notes_Temp 

SET IDENTITY_INSERT Notes OFF 

您正在爲NoteId插入標識列的值。 您可以像這樣打開表格上的標識插入,以便您可以指定自己的標識值。