无法将NULL值插入列中

时间:2017-05-17 01:44:27

标签: sql sql-server

我一直在尝试将数据插入到数据库中,但它不断向我显示此错误,即使我没有在第一个字段中写入列名(MemID),而是我试图输入它像这样分开

create table Member (
MemID VARCHAR(20) PRIMARY KEY,
FullName VARCHAR(50),
email VARCHAR(50),
gender VARCHAR(50),
Contact_Number VARCHAR(50),
Registration_Number VARCHAR(50),
User_S# INT
);

insert into Member (FullName, email, gender, Contact_Number, 
Registration_Number, User_S#) values ('Jemmy Joutapaitis', 
'jjoutapaitiscf@dailymail.co.uk', 'Male', '86-(804)800-8008', 
'3574884734839928', 449);
insert into Member (FullName, email, gender, Contact_Number, 
Registration_Number, User_S#) values ('Cleo Glynn', 'cglynncg@i2i.jp', 
'Male', '81-(694)548-5205', '5443114970343516', 450);
insert into Member (FullName, email, gender, Contact_Number, 
Registration_Number, User_S#) values ('Ivonne Deetlefs', 
'ideetlefsch@virginia.edu', 'Female', '86-(257)683-5628', 
'3571675846170605', 451);

insert into Member(MemID)
values('Mem0');
insert into Member(MemID)
values('Mem1');
insert into Member(MemID)
values('Mem2');

此代码给出了错误

  

无法将值NULL插入列' MemID',表中   ' master.dbo.Member&#39 ;;列不允许空值。 INSERT失败。

但是我分别插入了MemID列。

并且上面创建的表没有在数据库中显示,是因为错误还是别的?

3 个答案:

答案 0 :(得分:3)

这不是插件如何工作。

当触发插入时,sql尝试立即添加该行,而不等待后续语句(对于任何dml语句,它都是正确的,而不仅仅是插入)。

因此,当您的第一个插入被触发时,sql会尝试将null放入MemID,因为您尚未在插入中提供任何MemID。

尝试将其插入插入中的第一个位置。而不是单独的声明,如:

insert into Member (MemID, FullName, email, gender, Contact_Number, 
Registration_Number, User_S#) values ('Mem0','Jemmy Joutapaitis', 
'jjoutapaitiscf@dailymail.co.uk', 'Male', '86-(804)800-8008', 
'3574884734839928', 449);

修改

通过回复您的评论,我认为准备好的陈述是您正在寻找的。

由于你正在使用python,你可以准备你的插入语句,如:

sql = "insert into Member (MemID, FullName, email, gender, Contact_Number, 
    Registration_Number, User_S#) values (%s,'Jemmy Joutapaitis', 
    'jjoutapaitiscf@dailymail.co.uk', 'Male', '86-(804)800-8008', 
    '3574884734839928', 449);"
sql = sql.format(self.db_scan_table)

//whenever you've memid ready use.
self.cursor.execute(sql, ('Mem01'))

答案 1 :(得分:1)

定义AUTO_INCREMENT列以为您生成ID值:

CREATE TABLE Member (
  MemID INT AUTO_INCREMENT PRIMARY KEY,
  -- ...
);

如果这不实用,因为您需要某些特定的字符串定义,那么您唯一的选择是将其作为初始INSERT调用的一部分提供。您在此处有约束,PRIMARY KEY值不得为NULL

答案 2 :(得分:0)

应该能够使用下面的查询。识别下一个号码

insert into member(memid,......)
values ( 'MEM' + cast((select count(1) from member)+1 as varchar(100)),...   )   

如果你想从1开始,那么+ 1 否则删除+ 1

insert into member(memid,......)
values ( 'MEM' + cast((select count(1) from member) as varchar(100)),...   )