Почему 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.
Ответы
Ответ 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)