即使Column具有IDENTITY属性,也无法将值NULL插入列'id'

isi*_*sif 0 sql sql-server-2008

CREATE TABLE Type1
(
   TypeID       TINYINT         NOT NULL            IDENTITY(1,1),
   TypeName     VARCHAR(20)     NOT NULL,
   Speed        VARCHAR(10)     NOT NULL

   CONSTRAINT   TypeID_pk       PRIMARY KEY (TypeID)
);


   CREATE TABLE Splan
(
   PlanID       TINYINT         NOT NULL            IDENTITY(1,1),
   TypeID       TINYINT         NOT NULL,
   PlanName     VARCHAR(20)     NOT NULL,
   Quota        SMALLINT        NOT NULL

   CONSTRAINT   PlanID_pk       PRIMARY KEY (PlanID)
   CONSTRAINT   TypeID_fk       FOREIGN KEY (TypeID) REFERENCES Type1(TypeID)                                    
);  



  INSERT INTO Type1(TypeName, Speed)
  VALUES ('Sample type', '10Mbps'),
         ('Other type', '50Mbps');
Run Code Online (Sandbox Code Playgroud)

^直到有罚款

然后当我输入以下内容时,它返回"消息515,级别16,状态2,行8不能将值NULL插入列'TypeID'.....列不允许.INSERT失败." 声明终止

   INSERT INTO Splan(PlanName, Quota)
   VALUES ('Some sample name', '500GB'),
          ('sample2, '250GB');
Run Code Online (Sandbox Code Playgroud)

我已尝试在列级和表级创建约束,但第二个INSERT语句仍拒绝输入.通过GUI双重检查,'TypeID'肯定有IDENTITY属性.

我到处都看过,这个错误似乎源于缺少IDENTITY属性,但它在我的创建语句中的存在仍然出现错误.尝试去除种子并从IDENTITY增加,仍然没有.还尝试一次插入一行数据,也没有.

PS如果您没有注意到实际名称已被替换,其他列行已被省略.

Dan*_*man 5

由于您创建了typID NOT NULL,因此Sql抱怨默认值(NULL)不可接受.

尝试

INSERT INTO Splan(TypeID, PlanName, Quota)
VALUES (1, 'Some sample name', '500GB'),
       (2, 'sample2, '250GB');
Run Code Online (Sandbox Code Playgroud)

TypeID = 1和TypeID = 2的相应记录在Type1表中.


您正在创建2个表:Type1具有TypeId自动生成SPlan的主键PlanId,其主键也是自动生成的,并且必须提供外键 TypeId 不能为空.

如上所述,您必须首先输入1个或多个记录Type1,获取它们的TypeIds,然后将这些TypeId记录输入到新的记录中SPlan.

顺便提一下,使用TINYINT主键数据类型是完全合法的,但如果这不是作业,可能是一个非常糟糕的主意.