SQL:无法将值NULL插入列“ ExampleID”

时间:2018-10-04 11:26:59

标签: sql sql-server

执行后,我不断收到错误:

  

无法将值NULL插入表的“ ExampleID”列中   'DB_Example.dbo.tbl_Example';列不允许为空。插入   失败。

但是,我认为不存在任何NULL值。我试图通过使用以下命令简单地用特定值填充表格:

SELECT * FROM tbl_Example
INSERT INTO tbl_Example ([Name])
VALUES ('Example1'),
('Example2'),
('Example3'), 
('Example4')

我正在使用完全相同的代码/格式来填充数据库中的其他3个表,除此表外,其他任何表均未收到错误。无法弄清楚。

编辑:DBMS是SQL Server

2 个答案:

答案 0 :(得分:5)

似乎tbl_Example具有定义了ExampleID约束的另一列(即NOT NULL)。因此,您不能插入空值:

您还需要声明该列:

INSERT INTO tbl_Example (ExampleID, [Name])
     VALUES (?, 'Example1'), (?, 'Example2'), (?, 'Example3'), (?, 'Example4')

每当您使用INSERT INTO table (column_list)语句以及任何定义了NOT NULL约束的列时,都必须声明该列名应使用primary key这样的身份列。

例如,您的ExampleID列建议我作为身份列。

答案 1 :(得分:0)

问题在于INSERT中未包括的列被设置为其默认值。默认的“默认”为NULL,这就是您收到错误的原因。

检查您对Example的定义。通常,称为ExampleId的列将是一个身份列。因此,它看起来应该像:

CREATE TABLE tbl_Example (
    ExampleId INT IDENTITY(1, 1) PRIMARY KEY,
    Name VARCHAR(?)
);

IDENTITY()作为默认值。根据插入顺序,它通常是一个递增的值序列。

使用此定义,您的代码将起作用:

INSERT INTO tbl_Example ([Name])
VALUES ('Example1'),
       ('Example2'),
       ('Example3'), 
       ('Example4');

我不建议显式插入主键的值。在某些情况下,您想这样做,但是一般来说,自动生成密钥是可取的(如果要避免插入错误)。