2013-05-27 33 views
16

tôi có bảng sql nàyINSERT ghi vào bảng SQL với cột 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] 

Và tôi muốn sao chép bản ghi từ một bảng tạm thời BAO GỒM các NoteID (sử dụng truy vấn sql) ..

này là của tôi kịch bản:

SET IDENTITY_INSERT Notes OFF 

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

SET IDENTITY_INSERT Notes ON 

với kịch bản này, tôi nhận được một lỗi:

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

có cách nào khác để chèn bản ghi vào bảng có cột nhận dạng bằng truy vấn sql không?

Trả lời

24

Thay đổi OFF và ON xung quanh

SET IDENTITY_INSERT Notes ON 

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

SET IDENTITY_INSERT Notes OFF 
+0

cảm ơn @astander. khi tôi đã thử điều này, tôi đã có một lỗi khác: "Tên cột hoặc số giá trị được cung cấp không khớp với định nghĩa bảng." – Eytch

+1

oops! nevermind bình luận của tôi, tôi đã làm một điều ngu ngốc và lỗi tôi đã đề cập là cho một dòng khác nhau của kịch bản của tôi .. anyway, thay đổi OFF và ON xung quanh đã giải quyết vấn đề của tôi, cảm ơn rất nhiều – Eytch

2

Có lẽ bạn đang sử dụng SQL Server (bạn không nói) và đã hiểu lầm ý nghĩa và mục đích của IDENTITY_INSERT. Nói chung, bạn không được phép đặt rõ ràng giá trị của cột IDENTITY, nhưng bằng cách đặt IDENTITY_INSERT thành ON cho một bảng, bạn có thể tạm thời cho phép chèn như vậy.

+0

hmmm, nhờ @oldpro .. tôi nghĩ rằng tôi đã thực sự hiểu lầm mục đích của IDENTITY_INSERT. thật đáng xấu hổ .. nhưng một lần nữa hãy để tôi thử đặt nó thành BẬT – 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 

Bạn đang chèn giá trị cho NoteId là cột nhận dạng. Bạn có thể bật tính năng chèn danh tính trên bảng như thế này để bạn có thể chỉ định các giá trị nhận dạng của riêng mình.

Các vấn đề liên quan