Por que o SQL Server está jogando este erro: Não é possível inserir o valor NULL na coluna ‘id’?

Eu estou usando a seguinte consulta:

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

No entanto, não estou especificando a chave primária (que é id ). Então, minhas perguntas são, por que o sql server está voltando com este erro:

 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. 

Eu estou supondo que id deve ser um valor incremental.

Você precisa definir isso, ou então se você tiver uma coluna não anulável, sem valor padrão, se você não fornecer nenhum valor, ocorrerá um erro.

Para configurar o incremento automático no SQL Server Management Studio:

  • Abra sua mesa no Design
  • Selecione sua coluna e vá para Column Properties
  • Em Indentity Specification , defina (Is Identity)=Yes e Indentity Increment=1

Se a coluna id não tiver valor padrão, mas NOT NULL tiver NOT NULL , você deverá fornecer um valor

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

use IDENTITY(1,1) ao criar a tabela, por exemplo

 CREATE TABLE SAMPLE( [Id] [int] IDENTITY(1,1) NOT NULL, [Status] [smallint] NOT NULL, CONSTRAINT [PK_SAMPLE] PRIMARY KEY CLUSTERED ( [Id] ASC ) ) 

Você precisa especificar um ID na inserção, ou precisa configurar a coluna id no database para ter Especificação de Identidade = Sim.

Como id é PK, DEVE ser único e não nulo. Se você não mencionar nenhum campo na lista de campos para inserção, ele deverá ser um valor nulo ou padrão. Defina identidade (isto é, incremento automático) para este campo se você não quiser configurá-lo manualmente toda vez.

Você precisa definir a propriedade de incremento automático da coluna id como true quando criar a tabela ou alterar sua tabela existente para fazer isso.

@curt está correto, mas notei que às vezes até isso falha com erros NULL desaprovados e parece ser intermitente. Evitei o erro em todos os momentos, definindo também a Indenty Seed como 1 e IDENTITY(1, 1) NOT FOR REPLICATION .

você não deu um valor para id. Tente isto:

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

Ou você pode definir o incremento automático no campo id, se você precisar do valor de id adicionado automaticamente.

se você não puder ou não quiser definir a propriedade de incremento automático do id, você pode definir o valor para o id de cada linha, assim:

 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) 

Você pode inserir um valor manualmente na coluna ID (aqui eu chamo de “PK”):

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