0

从 Excel 工作表导入数据的最佳方法是什么?到目前为止,我使用的是 SSMS Express,所以我无法访问 SQL 导入向导。我也没有执行BULK INSERT命令的权限。

我目前的工作流程如下:清理 excel 文件,另存为 CSV,然后将其导入 SQLite 数据库。使用 RazorSQL 之类的 IDE 生成 SQLINSERT语句。

这工作得很好,直到我找到一个大约 75000 行的 Excel 文件。SSMS 只是给出一个错误,说“查询完成错误”或类似的东西。不显示错误消息。我尝试GO在每行末尾添加,但出现内存不足错误。

我有哪些选择?

4

4 回答 4

0

要回答您的问题,从 excel 导入数据的最佳方法,在我过去的经验中,将 excel 数据读入 c#,根据需要进行任何清理和格式化,因为 excel 喜欢弄乱数据,然后使用SqlBulkCopy(您只需要选择/插入权限)才能插入 SQL Server。如果您需要帮助从 C# 阅读 excel,请参阅此 SO 答案

更新: 鉴于您不是开发人员,请尝试使用bcp 实用程序(您应该只需要选择/插入权限)您可能需要先将 excel 文件另存为 CSV,然后将其直接导入 sql server,请参阅此SO 答案

于 2013-06-14T13:46:27.760 回答
0

您可以使用以下内容:

  1. bcp 实用程序(在文件系统数据转储和数据库之间),
  2. OPENQUERY(可以在 SSMS 中使用,在 Excel/csv 等外部数据源和数据库之间工作),
  3. BULK INSERT(可以从 SSMS 使用,在具有用户定义结构的外部文件和数据库之间工作),
  4. SSIS(通常作为 dtsx 包,有自己的 GUI,适用于各种源和目标)
  5. 一组 INSERT 语句(全部一个接一个,最终用 GO 切片或用 UNION ALL 打包)
  6. 在 XML 变量中序列化的记录集(只能从 SSMS 使用;您必须自己使用 FOR XML 和 XML 函数对其进行序列化/反序列化)

当然还有其他可能性,但这些可能是最常用的。

编辑:在我看来,您可以在脚本中每 5-10K 行之后尝试使用 GO。如果这不起作用,XML 序列化/反序列化可能是要走的路。

于 2013-06-14T13:47:36.177 回答
0

您可以使用链接服务器连接到 Excel 文档吗? 如何将 Excel 与 SQL Server 链接服务器和分布式查询一起使用

于 2013-06-14T13:50:02.297 回答
0

一个快速而肮脏的解决方法:分批提取 50k 行。

从员工限制 50000 中选择 *

从员工限制 50000、100000 中选择 *

来自 http://www.razorsql.com/articles/mysql_limit_query.html

于 2013-06-14T14:18:41.547 回答