2013-05-27 3 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

Изменение OFF и ON вокруг

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

упс! никогда не комментирую мой комментарий, я сделал глупую вещь, и ошибка, о которой я упомянул, была для другой строки моего сценария. В любом случае, смена OFF и ON вокруг решила мою проблему, спасибо большое – Eytch

2

Предположительно вы используете SQL Server (не говорят) и не поняли смысл и цель IDENTITY_INSERT. В общем случае вам не разрешено явно указывать значение столбца IDENTITY, но, установив для IDENTITY_INSERT значение ON для таблицы, вы можете временно разрешить такие вставки.

+0

hmmm, thanks @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, который является столбцом идентификации. Вы можете включить идентификационную вставку в таблице так, чтобы вы могли указать свои собственные значения идентичности.

Смежные вопросы