ACCESS或EXCEL数据导入到SQL数据库中,空值导入后变成了NULL
请问,如何设置,空值导入后仍是空值。值为NULL与空值有什么区别,在进行程序处理SQL数据库中数据时,处理方法相同吗,还是说有所区别请指导,谢谢...
请问,如何设置,空值导入后仍是空值。
值为NULL与空值有什么区别,在进行程序处理SQL数据库中数据时,处理方法相同吗,还是说有所区别
请指导,谢谢 展开
值为NULL与空值有什么区别,在进行程序处理SQL数据库中数据时,处理方法相同吗,还是说有所区别
请指导,谢谢 展开
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;
也可以将字段的默认值设置为''零长度字符串,这样系统会在字段没有指定字段值时自动输入空字符串。
在系统里,空值用关键字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;
也可以将字段的默认值设置为''零长度字符串,这样系统会在字段没有指定字段值时自动输入空字符串。
追问
代码中update students set phone='' where phone is null;
多列有NULL,如何改写
如果是所有列中都有NULL,代码又如何改写,或者说去掉所有列中NULL
追答
可以这样写sql语句:
update tblName set col1=case when col1 is null then '' else col1 end,
col2=case when col2 is null then '' else col2 end,
col3=case when col3 is null then '' else col3 end;
这里假设只有3个字段,如果有更多的字段以此类推。注意不得修改自增id字段,另外非字符型字段也不可这样修改,因为0长度字符串是写不进非字符型字段的。
再给点提示,其实将空值null修改成为空字符串其实并不是一个好主意。其中的道理就不说了,因为那得长篇大论等到您成为数据库高手时自然就会明白的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询