ACCESS或EXCEL数据导入到SQL数据库中,空值导入后变成了NULL

ACCESS或EXCEL数据导入到SQL数据库中,空值导入后变成了NULL,第1张

"空值"是null的中文叫法,两者是同一个东西。我想题主是想弄清楚"空字符串"(也称为"0长度字符串")与null(空值)之间的区别和处理方法。

在系统里,空值用关键字null表示,空字符串则用一对没有间隔的英文双引号""或英文单引号''表示(access数据库单、双引号表示的空字符串都可被识别,而MSSQL则必须要用一对单引号表示空字符串)。前者的数据类型是未知的,而后者的数据类型则是明确的,即它属于字符型。在没有约束的情况下,null值可以被写入任何数据类型字段,而空字符串只能写入字符型字段里。在数据库里null(空值)表示没东西,一个字段在未写入数据前它天然就是空的,因此我们可以通过隐式或显式两种方式向数据表写入null值,但是空字符串只能通过显式方式写入数据表,因为空字符串实际上是一种特殊的字符(长度为0)它不会天然就存在的,存储空字符串是要占用物理磁盘空间的。

例如,有学生表

students(sid int primary key,name varchar(50) not null,sex char(1) not null,dob datetime not null,phone varchar(50):

-- 隐式向电话字段写入null(空值),也就是不向字段写入任何值

insert into students (sid,name,sex,dob) values(101,'张三','男','1996-01-04')

-- 显式向电话字段写入null(空值)

insert into students (sid,name,sex,dob,phone) values(101,'张三','男','1996-01-04',null)

-- 只能显式向电话字段写入空字符串'',否则null值会取而代之,这是null的天然属性使然

insert into students (sid,name,sex,dob,phone) values(101,'张三','男','1996-01-04','')

在EXCEL里,系统对于空的单元格统一当做空字符串进行处理,我们可以将null(空值)和空字符串混为一谈,而在数据库里则不得将两者视为一样,对它们需要分别处理,否则可能会出现混乱。请留意,在ACCESS数据表视图里,空字符串和null值的外观看起来都是“空”的,如果你看到“空”的字段值,不表示它一定就是空值,它也许是空字符串,如果已经显式存入了空字符串的话。而在MSSQL里系统会用不同的外观来展示null值和零长度字符串,前者显式为null,后者显式为“空”。

我们在使用不同的系统工具向MSSQL导入数据时,系统对于被导入数据中的“空字符串”的处理方式可能会有变化的,有些情况下会将“空字符串”当做NULL来处理,有些则会按实际值来处理,是空值的就导入为空值,是零长度字符串则导入为零长度字符串。一般来说从excel、TXT等导入系统会将空字符串当做null导入,而从数据库表导入则按实际值导入。

题主如果想将MSSQL数据表的NULL转换为空字符串,可以运行更新查询,例如

update students set phone='' where phone is null

也可以将字段的默认值设置为''零长度字符串,这样系统会在字段没有指定字段值时自动输入空字符串。

应该是你的数据库的表定义为不能为空,但你的数据有空的数据。

如果你的excel确认都没有空的数据,打开excel,从最后一行的空白行开始,往后多选一些行,几十行或是几百行都行,选中后删除行。因为如果你在excel的最后空白行有过编辑,现在看到的是空白行,但导入的时候,会读取的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9702358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存