Почему при вставке в таблицу с первичным ключом / столбцом идентификатора возникает ошибка «Имя столбца или количество предоставленных значений не соответствует определению таблицы» - PullRequest
0 голосов
/ 11 февраля 2019

Таблица имеет столбец первичного ключа / идентификатора с начальным значением / приращением 1/1.Когда я пытаюсь вставить запись в таблицу, опуская столбец первичного ключа, потому что SQL должен автоматически присвоить этому столбцу значение, я получаю следующую ошибку: «Имя столбца или количество предоставленных значений не соответствует определению таблицы».

  1. Я попытался вставить запись, опуская поле первичного ключа / идентификатора.
  2. Я попытался вставить запись с явным значением первичного ключа / идентификатора и получил следующую ошибку: «Пользователь не сделалУ меня есть разрешение на запись в столбец. "
  3. Я попытался установить IDENTITY_INSERT в положение ON и получил следующую ошибку:" Не удается найти объект "dbo.temp", так как он не существует или у вас нетpermissions. "

    CREATE TABLE [dbo]. [temp] ([ProjectNumber] [INT] IDENTITY (1,1) NOT NULL, [ServiceCenterID] [INT] NULL, CONSTRAINT [PK_temp] КЛАВИША ПЕРВИЧНОГО КЛЮЧА ([ProjectNumber] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON,FILLFACTOR = 100) ВКЛ [ПЕРВИЧНЫЙ]) ВКЛ [ПЕРВИЧНЫЙ]

    ВСТАВИТЬ dbo.temp

    ВЫБРАТЬ 1 [ServiceCenterID]

Я ожидаю записьДля вставки в таблицу столбцу первичного ключа / идентификатора (projectNumber) автоматически присваивается значение 1. Вместо этого я получаю сообщение об ошибке «Имя столбца или количество предоставленных значений не соответствует определению таблицы».хотя projectNumber является столбцом IDENTITY

1 Ответ

0 голосов
/ 11 февраля 2019

Если вы хотите присвоить ProjectNumber, то вам нужно ввести два столбца.

INSERT dbo.temp (ProjectNumber, ServiceCenterID)
    SELECT 1, 1 as [ServiceCenterID];

Если вы хотите, чтобы он был установлен автоматически, то:

INSERT dbo.temp (ServiceCenterID)
    SELECT 1;

Ключевой идеей в обоих случаях является явное перечисление столбцов.Таким образом, вы менее подвержены ошибкам на INSERT с.И, если вы это сделаете, их будет легче отлаживать.

...