Почему SQL server выдает эту ошибку: не удается вставить значение 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.
2324   11  

11 ответов:

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

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

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

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

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

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

использовать 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
)
)

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

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

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

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

вы не дали значение для ID. Попробуйте это :

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

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

Если вы не можете или не хотите устанавливать свойство autoincrement идентификатора, вы можете установить значение для идентификатора для каждой строки, например:

INSERT INTO role (id, name, created)
SELECT 
      (select max(id) from role) + ROW_NUMBER() OVER (ORDER BY name)
    , name
    , created
FROM (
    VALUES 
      ('Content Coordinator', GETDATE())
    , ('Content Viewer', GETDATE())
) AS x(name, created)

в моем случае,

Я пытался обновить свою модель, сделав внешний ключ обязательным, но в базе данных уже были "нулевые" данные в некоторых столбцах из ранее введенных данных. Поэтому каждый раз, когда я запускаю update-database...я получил ошибку.

Я решил это, вручную удалив из базы данных все строки, которые имели null в столбце, который я делал обязательным.

вы можете вставить значение вручную в столбец ID (здесь я называю его "PK"):

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

Comments

    Ничего не найдено.