Подтвердить что ты не робот

Почему SQL-сервер бросает эту ошибку: не удается вставить значение NULL в столбец "id"?

Я использую следующий запрос:

INSERT INTO role (name, created) VALUES ('Content Coordinator', GETDATE()), ('Content Viewer', GETDATE())

Однако я не указываю первичный ключ (который id). Поэтому мои вопросы: почему сервер sql возвращается с этой ошибкой:

Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column 'id', table 'CMT_DEV.dbo.role'; column does not allow nulls. INSERT fails.
The statement has been terminated.
4b9b3361

Ответ 1

Я предполагаю, что id должен быть добавочным значением.

Вам нужно установить это, или если у вас есть столбец с нулевым значением, без значения по умолчанию, если вы не указали значение, оно будет ошибкой.

Чтобы настроить автоматическое увеличение в SQL Server Management Studio:

  • Откройте таблицу в Design
  • Выберите колонку и перейдите к Column Properties
  • В Indentity Specification установите (Is Identity)=Yes и Indentity Increment=1

Ответ 2

Если столбец id не имеет значения по умолчанию, но имеет ограничение NOT NULL, вы должны сами предоставить значение

INSERT INTO dbo.role (id, name, created) VALUES ('something', 'Content Coordinator', GETDATE()), ('Content Viewer', GETDATE())

Ответ 3

Вам либо нужно указать идентификатор в вставке, либо вам нужно настроить столбец id в базе данных, чтобы иметь спецификацию идентификатора = да.

Ответ 4

Как идентификатор PK, он ДОЛЖЕН быть уникальным, а не null. Если вы не укажете какое-либо поле в списке полей для вставки, оно должно быть пустым или значением по умолчанию. Установите идентификатор (например, автоинкремент) для этого поля, если вы не хотите каждый раз устанавливать его вручную.

Ответ 5

Вам нужно установить для свойства autoincrement столбца id значение true при создании таблицы или вы можете изменить существующую таблицу для этого.

Ответ 6

@curt верен, но я заметил, что иногда даже это терпит неудачу с ошибками NULL, и это кажется прерывистым. Я всегда избегал ошибки, также устанавливая значение "Семя индивидуума" равным 1 и IDENTITY(1, 1) NOT FOR REPLICATION.

Ответ 7

вы не указали значение id. Попробуйте следующее:

INSERT INTO role (id, name, created) VALUES ('example1','Content Coordinator', GETDATE()), ('example2', 'Content Viewer', GETDATE())

Или вы можете установить автоматическое приращение в поле id, если вам нужно автоматически добавить значение id.

Ответ 8

Вы можете вставить значение вручную в столбец идентификатора (здесь я называю его "ПК" ):

insert into table1 (PK, var1, var2)
values ((select max(PK)+1 from table1), 123, 456)