为什么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)=Yes
和Indentity 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)