2012-04-04 5 views
46

Я использую следующий запрос:Почему SQL-сервер бросает эту ошибку: Не удается вставить значение NULL в столбец «id»?

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

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

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. 

ответ

81

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

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

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

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

, но у меня есть 2 колонки под названием идентификатор и id_student .. Я же выше ошибка .. я могу установить тождество только один column..if я набор для средств ид , ошибка для id_student или если я установлен для id_student, значит, получена ошибка для id. – pcs

+0

При попытке сохранить эти изменения Management Studio говорит: «Сохранение изменений не разрешено. Изменения, которые вы внесли, требуют, чтобы следующие таблицы были удалены и повторно созданы. Вы либо внесли изменения в таблицу, создан или включен параметр Запретить сохранение изменений, требующих повторной сборки таблицы. " – Henno

+2

Несмотря на то, что я не включил этот параметр, он оказался включенным. Я отключил его (в разделе «Инструменты»> «Параметры»> «Дизайнеры») и смог сохранить изменения. – Henno

0

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

0

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

5

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

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

Вы должны установить автоинкрементного свойство столбца Идентификатор верно при создании таблицы или вы можете изменить существующую таблицу, чтобы сделать это.

-3

Вы можете вставить значение вручную в столбце ID (здесь я называю это «ПК»):

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

Можете ли вы также добавить объяснение, как это будет работать? – Robert

0

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

0

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

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

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

1

использование IDENTITY(1,1) при создании таблицы например

CREATE TABLE SAMPLE(
[Id]  [int] IDENTITY(1,1) NOT NULL, 
[Status] [smallint] NOT NULL, 

CONSTRAINT [PK_SAMPLE] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
) 
) 
Смежные вопросы