EXCEL 导入MSSqlserver数据库报错

通过navicat12倒出数据,文件格式是xls,但在xls修改完数据后再往数据库便导入便报错。此外因为数据量很大,超过24万条数据,但xls格式导出的内容只有6万多数据。不过最后还是解决了。

碰到的问题

  1. xls数据行数支持不足
  2. xlsx和xls使用vlookup函数后报错,找不到对应数据(因为表格上是由绿色三角
  3. 主键约束问题
  4. xlsx格式中日期与数据库中datatime格式不符合
  5. sqlserver自增长列标识导入的时候报错【这个是最坑的一切的源头!

1.xls数据行数支持不足

也是头一次遇到需要面对excel行数不足的问题,数据大约有24万,对2003版,最大行数是65536行,对2007以上版本,最大行数是1048576行

在Excel里用Ctrl+向下方向键可以到达最后一行进行验证。还好xlsx支持百万行数据,在navicat中导出的格式选择xlsx就好了。(导出的时候xlsx文件可能会有问题,报错是在win7上,装的是office2010,换了台win10,office2019再用navicat12导出就没问题了)

2.xlsx和xls使用vlookup函数后报错

因为excel使用vlookup后发现明明可以匹配的数据,但是就是显示匹配结果是#N/A,数据没问题,但是再空格上边有“绿色三角”。

搜一搜后发现是数据异常的意思,也就因为文件格式有变动,所以出现这个问题。 解决的办法也很简单,就是选中所有绿色三角,然后点击提示的这个黄色小叹号。然后点击转换为数字,三角就没有了。之后vlookup函数也正常工作了!

3.主键约束问题 

这个问题是通过excel导入的时候发现的,原来是设置了两个属性共同为主键,但是看数据是没问题的,两个属性按照逻辑来讲不会冲突。取消主键约束后(就是点击两个小钥匙就可以取消)数据不再报错。

4.xlsx格式中日期与数据库中datatime格式不符合 

取消主键后,结果发现导入的数据确实存在重复值!是日期格式的属性有重复值,都是1900年.....这样的,数据库里边是datatime,但excel表格里边是这样显示的。

应该是数字格式没匹配上。 

几番搜索后,得到解决办法,就是点击上图的“其他数字格式”,然后设置一下类型。

 这样设置之后再导入就不再报错,并且数据库里边的数据是正常的datatime格式了!

 5.Sqlserver自增长列标识导入的时候报错【这个是最坑的一切的源头!

 之所以会出现这种需求,是因为我把数据库数据的导入导出来更新想象的太简单了,导出完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文件,包括数据和表结构!

 当然更好的方式是对整个数据进行灾备和定期备份,这个我不太了解,经此一役后要多注意这方面知识的学习了!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个将excel文件导入SQLServer表中的程序 一 双击Input.exe运行程序,将弹出一个窗口,这时请你在"数据库名"后面的 输入栏中输入数据库名(如果是千方百剂就是输入帐套名).你如果没对数 据库的登录进行特殊修改的话,那"用户名和密码"就没必要修改了. 二 填好以上输入框后,真接单击"连接数据库",如果连接成功,将弹出"数据库 连接成功,你现在可以导入数据"的对话框,你按"OK"后将弹出新的一个数据 导入的窗口. 三 在这个窗口上单击"打开EXCEL文件"按钮,然后选择你要导入Excel文件, 按打开(这时如果你数据比较多的话你可能要多等一会儿时间),之后就弹 出一个让你选择Excel工作区的窗口,你可以在下拉框中选择你数据所在的 Excel工作区了.选完以后按确定,你可以看到你Excel里的数据已经在"Excel 数据信息"里面了.而且还可以看到多了一列"不导入"的选项了.你如果哪一行 的数据导入的话你可以打勾,这一行将不被导入. 四 做完以上三步后,请在"表名"后面的下拉框中选择你所要导入的表的名称. 选完后,你得到"数据转换信息如下"这一栏配置数据转换的对应关系. 五 双击Excel字段处从下拉框中选择excel的列,双击表字段处从下拉框中选 择SQL表的列,然后看这列是否是"关键字",是的话打勾,不是不打勾.选择 完第一行后,就按方向键的向下键,继续第二行的选择,直到配置完Excel列 和表字段的对应关系为止. 六 按"导入数据"按钮系统会自动将页面转到"转换信息"这一页面.你将可以看 到第几行导入成功,或第几行导入失改的信息.
当然,我可以帮你写一段完整的代码,用于在 HTML 和 PHP 中调用 MSSQL Server 数据库并进行列表显示。以下是一个简单的示例: ```html <!DOCTYPE html> <html> <head> <title>MSSQL Database List</title> </head> <body> <h1>MSSQL Database List</h1> <?php // 连接到 MSSQL Server 数据库 $serverName = "your_server_name"; $connectionOptions = array( "Database" => "your_database_name", "Uid" => "your_username", "PWD" => "your_password" ); $conn = sqlsrv_connect($serverName, $connectionOptions); if ($conn === false) { die(print_r(sqlsrv_errors(), true)); } // 执行查询语句 $query = "SELECT * FROM your_table_name"; $result = sqlsrv_query($conn, $query); if ($result === false) { die(print_r(sqlsrv_errors(), true)); } // 显示数据库中的记录 echo "<table>"; echo "<tr><th>ID</th><th>Name</th><th>Email</th></tr>"; while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) { echo "<tr>"; echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['email'] . "</td>"; echo "</tr>"; } echo "</table>"; // 关闭数据库连接 sqlsrv_free_stmt($result); sqlsrv_close($conn); ?> </body> </html> ``` 请确保将以下值替换为实际的数据库连接信息: - `your_server_name`:MSSQL Server 的主机名或 IP 地址。 - `your_database_name`:要连接的数据库名称。 - `your_username`:数据库的用户名。 - `your_password`:数据库的密码。 - `your_table_name`:要从中检索数据的表格名称。 这段代码会创建一个简单的 HTML 页面,其中包含一个标题和一个表格,用于显示从 MSSQL Server 数据库中检索的数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值