SQL Server为什么会引发此错误:无法将值NULL插入列'id'中?


78

我正在使用以下查询:

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.

Answers:


145

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

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

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

  • 在打开表 Design
  • 选择您的专栏并转到 Column Properties
  • Indentity Specification,设置(Is Identity)=YesIndentity Increment=1

但是我有2列分别称为id和id_student ..我与上面的错误相同..我只能设置同一列..如果我将id设置为id,则id_student出错,或者如果我将id_student设置为id则出错。
pcs 2015年

尝试保存这些修改时,Management Studio说“不允许保存更改。所做的更改要求删除并重新创建以下表。您对无法重新创建的表进行了更改或启用选项“防止保存需要重新创建表的更改”。”
Henno

9
即使我没有启用此选项,它也被打开。我取消选中它(在“工具”>“选项”>“设计器”下),并能够保存更改。
Henno

7

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
)
)

4

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

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

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)

0

您需要在插入中指定ID,或者需要在数据库中配置id列以使Identity Specification = Yes。


0

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


0

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


0

您没有提供id的值。试试这个 :

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

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


0

我有一个类似的问题,在寻找到它,它只是一个字段中的实际表中缺少ididempty/null) -这意味着当你试图让id现场的primary key会导致错误,因为表中包含的行null的价值primary key

如果您看到与错误相关联的临时表,则可以解决此问题。我正在使用SQL Server Management Studio。


-1

@curt是正确的,但我注意到有时即使失败也会出现NULL不允许的错误,并且它似乎是间歇性的。通过将Indenty Seed设置为1和,我始终避免了该错误IDENTITY(1, 1) NOT FOR REPLICATION


-1

就我而言

我试图通过要求使用外键来更新模型,但是数据库中某些字段中的先前输入数据中已经有“空”数据。所以每次我运行更新数据库...我都收到错误。

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



-4

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

insert into table1 (PK, var1, var2)
values ((select max(PK)+1 from table1), 123, 456)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.