2013-05-27 13 views
16

mam tej tabeli SQLrekord INSERT do tabeli SQL z kolumny 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] 

i chcę skopiować rekordy z tabeli tymczasowej w tym NoteID (za pomocą zapytania SQL) ..

to jest moje scenariusz:

SET IDENTITY_INSERT Notes OFF 

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

SET IDENTITY_INSERT Notes ON 

z tego skryptu, otrzymuję błąd:

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

jest inny sposób wstawiania rekordów do tabeli z kolumną tożsamości za pomocą zapytania sql?

Odpowiedz

24

Zmiana OFF i ON wokół

SET IDENTITY_INSERT Notes ON 

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

SET IDENTITY_INSERT Notes OFF 
+0

dzięki @astander. kiedy próbowałem tego, mam inny błąd: "Nazwa kolumny lub liczba dostarczonych wartości nie pasuje do definicji tabeli." – Eytch

+1

oops! nie komentujcie mojego komentarza, zrobiłem głupią rzecz i błąd, o którym wspomniałem, dotyczył innej linii mojego skryptu. W każdym razie, zmiana OFF i ON wokół rozwiązała mój problem, bardzo dziękuję – Eytch

2

Prawdopodobnie używasz SQL Server (nie mówią) i źle zrozumieć sens i cel IDENTITY_INSERT. Zasadniczo nie można jawnie ustawić wartości kolumny IDENTYFIKACJA, ale ustawiając IDENTITY_INSERT na ON dla tabeli, można tymczasowo zezwolić na takie wstawki.

+0

hmmm, dzięki @oldpro .. Myślę, że naprawdę źle zrozumiałem cel IDENTITY_INSERT. jak haniebne .. ale znowu pozwól mi spróbować ustawić na 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 

Wstawiasz wartości dla NoteId, które są kolumną tożsamości. Można włączyć wstawianie tożsamości w tabeli, tak aby można było określić własne wartości tożsamości.

Powiązane problemy