Ошибка при вставке данных в таблицу

Я создал две таблицы, как показано ниже, и вставил данные в соответствии со структурой таблицы.

create table table1(
customerID int identity Primary key,
customerName nvarchar(30))

create table table2(
sensorID int identity Primary key,
location nvarchar(20) not null,
temp decimal not null,
custID int
foreign key(custID) references table1 (customerID))

Insert into table1 values(1000,'john smith')
Insert into table1 values(1001,'Mike Coles')
Insert into table1 values(1002,'sam carter')

Insert into table2 values(1000,'NY',70,1001)
Insert into table2 values(1001,'NY',70,1002)
Insert into table2 values(1002,'LA',60,1001)
Insert into table2 values(1003,'CA',67,1000)
Insert into table2 values(1004,'NY',70,1002)

Но при выполнении я получаю следующие сообщения об ошибках

Сообщение 8101, уровень 16, состояние 1, строка 12 Явное значение для столбца идентификаторов в таблице «таблица 1» может быть указано только в том случае, если используется список столбцов и параметр IDENTITY_INSERT включен.

Может кто-нибудь ответить, почему я получаю эти ошибки.


person user3259712    schedule 01.02.2014    source источник
comment
Именно то, что говорит вам сообщение об ошибке.   -  person leppie    schedule 01.02.2014
comment
Сообщение 8101, уровень 16, состояние 1, строка 2. Явное значение для столбца идентификаторов в таблице «таблица 1» может быть указано только в том случае, если используется список столбцов и параметр IDENTITY_INSERT включен. Сообщение 8101, уровень 16, состояние 1, строка 3. Явное значение для столбца идентификаторов в таблице «таблица 1» может быть указано только в том случае, если используется список столбцов и параметр IDENTITY_INSERT включен. Сообщение 8101, уровень 16, состояние 1, строка 4. Явное значение для столбца идентификаторов в таблице «таблица 1» может быть указано только в том случае, если используется список столбцов и параметр IDENTITY_INSERT включен.   -  person user3259712    schedule 01.02.2014


Ответы (2)


  1. Установите ВСТАВКУ ИДЕНТИФИКАЦИОННОЙ ИНФОРМАЦИИ на ВКЛ.

    SET IDENTITY_INSERT table1 ON

  2. Создайте список столбцов для вставки, например, вместо вставки напрямую без указания столбцов.

    INSERT INTO TABLE1(CUSTOMERNAME) SELECT 'john smith'
    
  3. Отключить вставку удостоверения личности

person Community    schedule 01.02.2014

Вам не нужно передавать значения для customerID для table1, потому что его идентификатор — ON. он будет автоматически увеличен.

сначала вставьте в table1:

SET IDENTITY_INSERT table1 OFF
Insert into table1(customerName) values('john smith')
Insert into table1(customerName) values('Mike Coles')
Insert into table1(customerName) values('sam carter')

тогда давайте вставим в table2

SET IDENTITY_INSERT table2 OFF
Insert into table2(location, temp, custID) values('NY',70,1)
Insert into table2(location, temp, custID) values('NY',70,2)
Insert into table2(location, temp, custID) values('LA',60,1)
Insert into table2(location, temp, custID) values('CA',67,1)
Insert into table2(location, temp, custID) values('NY',70,1)

ПРИМЕЧАНИЕ. Вам необходимо сначала вставить записи в table1, затем успешно, и только после этого вы сможете вставлять в table2 только потому, что вы установили Foreign Key, который ссылается на table1's customerID.

Надеюсь, это поможет вам!

person immayankmodi    schedule 01.02.2014
comment
Я создал другую таблицу с именем table11, выполнил и создал table11 и сделал явную вставку с помощью SET IDENTITY_INSERT table11 ON с указанными выше данными... затем SET IDENTITY_INSERT table11 OFF. при выполнении получил то же сообщение об ошибке. - person user3259712; 01.02.2014
comment
Что я сделал, я удалил идентификатор из идентификатора клиента из таблицы 11, вставил вышеуказанные значения и выполнил их. Затем сделал то же самое для таблицы 22. в то время как операторы вставки executinf получили следующую ошибку: Msg 213, уровень 16, состояние 1, строка 2 Ошибка вставки: имя столбца или количество предоставленных значений не соответствует определению таблицы. 5 таких ошибок... - person user3259712; 01.02.2014
comment
какой запрос вы используете для table22? - person immayankmodi; 01.02.2014
comment
Я только что создал еще одну таблицу22, которая ранее была моей таблицей2, и поместил эти данные, как вы предложили: Вставить в значения таблицы2 (1000, «Нью-Йорк», 70,1001) Вставить в значения таблицы2 (1001, «Нью-Йорк», 70,1002) Вставить в значения table2(1002,'LA',60,1001) Вставить в значения table2(1003,'CA',67,1000) Вставить в значения table2(1004,'NY',70,1002) - person user3259712; 02.02.2014
comment
Используйте схему таблицы базы данных table1 и table2, как в вашем вопросе, а затем выполните запрос в соответствии с моим обновленным ответом. И, пожалуйста, не передавайте значения в столбцы идентификаторов, поскольку я сказал, что они автоматически увеличиваются, и оставьте sql для вставки значений в эти столбцы. - person immayankmodi; 02.02.2014