为什么 SQL 服务器会抛出此错误:无法将值 NULL 插入“id”列?

新手上路,请多包涵

我正在使用以下查询:

 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.

原文由 Ben 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

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

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

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

  • Design 中打开你的表
  • 选择您的列并转到 Column Properties
  • Indentity Specification 下,设置 (Is Identity)=YesIndentity Increment=1

原文由 Curtis 发布,翻译遵循 CC BY-SA 3.0 许可协议

规则:在插入新数据时,您不能忽略那些 不允许 空值的列。

你的案例

  • 您正在尝试插入值,同时忽略不允许空值的 id 列。显然这行不通。
  • 很高兴您稍后执行插入查询时,“身份规范”似乎会自动为您填充不可为空的 id 值(请参阅 所选答案)。

我的情况

  • 问题(使用 SSMS 时):尝试将新的不可为空的列添加到已存在的包含数据的表时出现此错误。我得到的错误是:

无法将值 NULL 插入列“id_foreign”、表“MyDataBase.dbo.Tmp_ThisTable”;列不允许空值。插入失败。该语句已终止。

  • 解决方案:
    1. 我创建了我需要的列 id_foreign ,允许空值。
    2. 我编辑/插入了 id_foreign 的所有必需值。
    3. 一旦值到位,我返回并取消选中“允许 Nulls”复选框。现在错误消失了。

原文由 carloswm85 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进