SQL插入错误:无法将值NULL插入列'Id'

时间:2018-12-06 17:31:56

标签: database sql-insert

我想通过以下查询在数据库中插入值:

INSERT INTO Users (pinConfirmed,Factor,DateUtc,LockoutEnabled,AccessCount,EmailConfirmed)
 values ('false', 'false','1/1/2018' ,'false','0','false')

但是我得到这个错误:无法将值NULL插入表'Users'的'Id'列中;列不允许为空。 INSERT失败。

但是,数据库中已经有ID不为null的数据。 我检查了这两个请求,但Id没有空值。

select * from Users where Id IS NULL;
select * from Users where Id = 'NULL';

我不明白问题出在哪里。 请帮助。

3 个答案:

答案 0 :(得分:0)

ID是PRIMARY键,它是该行的唯一标识符。不能为空。这就是为什么您有错误。

答案 1 :(得分:0)

根据您对上述问题的评论,Id列定义为:

[Id] NVARCHAR (128) NOT NULL 

就是这样。没有默认值,没有标识/自动递增,等等。只是一个不能为NULL的字符值。但是,当您执行插入操作时,您不会提供任何值:

INSERT INTO Users (pinConfirmed,Factor,DateUtc,LockoutEnabled,AccessCount,EmailConfirmed)
values ('false', 'false','1/1/2018' ,'false','0','false')

这就是为什么您会得到一个错误。 NOT NULL表示必需。您没有提供。

您有几种选择:

  • INSERT时为列提供值
  • 使列生成自己的值(这取决于您的RDBMS,例如,在SQL Server中,将列设置为IDENTITY,在MySQL中,将列设置为AUTOINCREMENT,尽管两者其中有 integer 列,而您的是 character 数据,因此您还需要更改数据类型)
  • 允许NULL,它当然仅在一次下起作用,因为这是主键列,并且值必须唯一。

答案 2 :(得分:0)

如果您进入表设计器,在Id列的属性中,您将看到Identity Specification属性集,如下所示:

the documentation

对此进行扩展,并将(身份)设置为是。这会将“身份增量”和“身份种子”的默认值设置为1

enter image description here

现在保存表格,一切就绪。