运行大约75000个插入语句

时间:2013-06-14 13:34:47

标签: sql-server bulkinsert

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

我当前的工作流程如下:清理excel文件,另存为CSV,然后将其导入SQLite数据库。使用像RazorSQL这样的IDE来生成SQL INSERT语句。

这很好用,直到我点击了大约75000行的Excel文件。 SSMS只是给出一个错误,说“查询已完成错误”或类似的东西。没有显示错误消息。我尝试在每行的末尾添加GO,但我的内存错误。

我有什么选择?

4 个答案:

答案 0 :(得分:0)

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

更新:鉴于您不是开发人员,请尝试使用reading excel from C#(您只需要选择/插入权限),您可能需要先将Excel文件另存为CSV,然后将其直接导入sql server,请参阅此bcp utility

答案 1 :(得分: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函数自行序列化/反序列化)
  7. 肯定有其他可能性,但这些可能是最常用的。

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

答案 2 :(得分:0)

您是否可以使用链接服务器连接到Excel文档? How to use Excel with SQL Server linked servers and distributed queries

答案 3 :(得分:0)

快速而肮脏的解决方法:分批拉出50k行。

从员工限额50000中选择*

从员工限额50000,100000

中选择*

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