通过navicat12倒出数据,文件格式是xls,但在xls修改完数据后再往数据库便导入便报错。此外因为数据量很大,超过24万条数据,但xls格式导出的内容只有6万多数据。不过最后还是解决了。
也是头一次遇到需要面对excel行数不足的问题,数据大约有24万,对2003版,最大行数是65536行,对2007以上版本,最大行数是1048576行。
在Excel里用Ctrl+向下方向键可以到达最后一行进行验证。还好xlsx支持百万行数据,在navicat中导出的格式选择xlsx就好了。(导出的时候xlsx文件可能会有问题,报错是在win7上,装的是office2010,换了台win10,office2019再用navicat12导出就没问题了)
因为excel使用vlookup后发现明明可以匹配的数据,但是就是显示匹配结果是#N/A,数据没问题,但是再空格上边有“绿色三角”。
搜一搜后发现是数据异常的意思,也就因为文件格式有变动,所以出现这个问题。 解决的办法也很简单,就是选中所有绿色三角,然后点击提示的这个黄色小叹号。然后点击转换为数字,三角就没有了。之后vlookup函数也正常工作了!
这个问题是通过excel导入的时候发现的,原来是设置了两个属性共同为主键,但是看数据是没问题的,两个属性按照逻辑来讲不会冲突。取消主键约束后(就是点击两个小钥匙就可以取消)数据不再报错。
取消主键后,结果发现导入的数据确实存在重复值!是日期格式的属性有重复值,都是1900年.....这样的,数据库里边是datatime,但excel表格里边是这样显示的。
应该是数字格式没匹配上。
几番搜索后,得到解决办法,就是点击上图的“其他数字格式”,然后设置一下类型。
这样设置之后再导入就不再报错,并且数据库里边的数据是正常的datatime格式了!
之所以会出现这种需求,是因为我把数据库数据的导入导出来更新想象的太简单了,导出完excel格式数据后就很放心的清除数据库表的数据,可是没想到啊,再导入的时候就报错,发现是因为这个表里边存在“标识列”,就是自增长的一个列,不允许通过excel方式来往里边添加数据。
开始没有意识到标识列字段的重要性,所以强制通过excel导入了数据,就是在导入的时候将excel列与数据库属性的对应关系选择空,这样就可以导入了,不过导入的数据的标识列是自动往后边累加的!
在发现表示列的数不一致的时候,会想有没有取消表示列的方法,搜到的方法是通过【增加同名列-复制数据-删标识列】的方法。但既然设置数据库的时候启用了表示列,那必然是有用的。所以pass掉这种方法。后来又发现可以通过充值增加种子的方法重新导入再增,也就是下边第一句SQL,这样就解决了部分问题,另外一部分问题分解成了上边的Q1~Q4也都解决了!
-- 重置表中的标识列的增加起点为1
-- 参数1是表名 参数2是执行类型 RESEED代表重置种子 参数3设置数值
DBCC CHECKIDENT('USERINFO', RESEED,1)
-- 清除表的内容 USERINFO 是表名
TRUNCATE TABLE [USERINFO]
-- 设置手动插入标识列的值
-- ON 代表启动手动设置 不过这个对insert语句有效 excel测试无果
set identity_insert USERINFO ON
就以这次经历来讲最保险的数据导出是将这个表转存成sql文件,包括数据和表结构!
当然更好的方式是对整个数据进行灾备和定期备份,这个我不太了解,经此一役后要多注意这方面知识的学习了!