为什么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. 

我假设id应该是一个递增的价值。

你需要设置这个,否则如果你有一个不可空的列,没有默认值,如果你没有提供任何值将会出错。

在SQL Server Management Studio中设置自动增量:

  • Design打开你的桌子
  • select您的列并转到Column Properties
  • Indentity Specification ,设置(Is Identity)=YesIndentity Increment=1

如果id列没有默认值,但有NOT NULL约束,那么你必须自己提供一个值

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

您可能需要在插入中指定一个ID,或者需要在数据库中configurationID列以使Identity Specification = Yes。

由于id是PK,它必须是唯一的,而不是空的。 如果在字段列表中没有提到插入的任何字段,它应该是空值或默认值。 如果您不想每次都设置为manualy,请为此字段设置身份(即自动增量)。

您需要在创build表时将id列的autoincrement属性设置为true,或者可以更改现有表来执行此操作。

@curt是正确的,但我注意到,有时甚至这失败与NULL不允许的错误,并且似乎是间歇性的。 我通过将Indenty Seed设置为1和IDENTITY(1, 1) NOT FOR REPLICATION来避免错误。

你没有给身份证的价值。 尝试这个 :

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

或者你可以设置自动增加id字段,如果你需要自动添加的id值。

你可以在ID列中手动插入一个值(这里我称之为“PK”):

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