SQL server为何引发此错误:无法将值NULL插入列“id”中?

SQL server为何引发此错误:无法将值NULL插入列“id”中?,sql,sql-server,Sql,Sql Server,我正在使用以下查询: 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 'C

我正在使用以下查询:

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.
我假设id应该是一个递增的值

您需要设置该值,否则,如果您有一个不可为null的列,并且没有默认值,那么如果您不提供任何值,它将出错

要在SQL Server Management Studio中设置自动增量,请执行以下操作:

打开你的设计表 选择列并转到列属性 在一致性规范下,设置为Identity=Yes,一致性增量=1
您需要在insert中指定一个ID,或者需要将数据库中的ID列配置为具有Identity Specification=Yes。

由于ID是PK,因此它必须是唯一的且不为null。 如果您在字段列表中没有提到任何要插入的字段,则该字段应为null或默认值。 如果您不想每次手动设置此字段,请为此字段设置标识,即自动递增。

如果id列没有默认值,但没有NULL约束,则您必须自己提供一个值

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

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

您可以在此处的id列中手动插入一个值,我称之为PK:

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

@curt是正确的,但我注意到,有时即使这样也会失败,出现不允许为NULL的错误,而且似乎是间歇性的。
我始终避免了该错误,还将Indenty Seed设置为1,IDENTITY1,1不用于复制。

您没有为id指定值。请尝试以下操作:

INSERT INTO role (id, name, created) VALUES ('example1','Content Coordinator', GETDATE()), ('example2', 'Content Viewer', GETDATE())
如果需要自动添加id值,也可以设置“id自动递增”字段。

在创建表格时使用标识1,1 乙二醇


如果不能或不想设置id的autoincrement属性,则可以为每行的id设置值,如下所示:

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)
就我而言

我试图通过设置一个外键来更新我的模型,但是数据库中的空数据已经存在于以前输入的数据的某些列中。所以每次我运行更新数据库…我都会出错


我通过手动从数据库中删除我所要求的列中所有空的行来解决了这个问题。

我也遇到了类似的问题,在研究它时,它只是实际表中的一个字段,缺少id id为空/null-这意味着当您试图将id字段设置为主键时,它将导致错误,因为表中包含主键值为null的行

如果您看到与错误相关联的临时表,这可能是修复方法。我使用的是SQLServerManagementStudio


如果使用entityframework。打开迁移,将值设置为null:true,并更新数据库


但是我有两个栏目,分别是id和id\u student。。我犯了同样的错误。。我只能设置一列的标识。如果我为id设置,则表示id\u student出错,或者如果我为id\u student设置,则表示id出错。在尝试保存这些修改时,Management Studio表示不允许保存更改。您所做的更改需要删除并重新创建以下表。您对无法重新创建的表进行了更改,或者启用了“阻止保存需要重新创建表的更改”选项。尽管我没有启用此选项,但结果显示该选项处于启用状态。我在“工具”>“选项”>“设计器”下取消选中它,并能够保存更改。请不要发布代码图像,将代码复制到问题中,并使用块代码格式:欢迎使用堆栈溢出!请注意,您正在回答一个非常古老且已回答的问题。这是一本关于旅游的指南。
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)