2013-05-27 19 views
16

Ho questa tabella SQLInserisci record di tabella SQL con colonna 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] 

e voglio copiare i record da una tabella temporanea COMPRESO il NoteID (utilizzando query SQL) ..

questo è il mio script:

SET IDENTITY_INSERT Notes OFF 

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

SET IDENTITY_INSERT Notes ON 

con questo script, sto ottenendo un errore:

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

esiste un altro modo per inserire record in una tabella con colonna Identity utilizzando sql query?

risposta

24

Modificare l'OFF e ON intorno

SET IDENTITY_INSERT Notes ON 

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

SET IDENTITY_INSERT Notes OFF 
+0

grazie a @astander. quando ho provato questo, ho un altro errore: "Il nome della colonna o il numero di valori forniti non corrisponde alla definizione della tabella." – Eytch

+1

oops! non importa il mio commento, ho fatto una cosa stupida e l'errore che ho citato è stato per una linea diversa della mia sceneggiatura .. in ogni caso, cambiare OFF e ON in giro ha risolto il mio problema, grazie mille – Eytch

2

Presumibilmente si utilizza SQL Server (non si dice) e hanno frainteso il significato e lo scopo di IDENTITY_INSERT. In generale, non è consentito impostare esplicitamente il valore di una colonna IDENTITY, ma impostando IDENTITY_INSERT su ON per una tabella è possibile consentire temporaneamente tali inserimenti.

+0

hmmm, grazie a @oldpro .. Penso di aver davvero frainteso lo scopo di IDENTITY_INSERT. che vergogna .. ma lasciatemi provare a impostarlo su 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 

Si stanno inserendo valori per NoteId che è una colonna di identità. È possibile attivare l'inserimento di identità sulla tabella in questo modo in modo da poter specificare i propri valori di identità.

Problemi correlati