赞
踩
初次使用SqlServer,发现其批量插入和MySQL等有些不同,做下记录。
SqlServer 插入操作时对语句的条数和参数的数量都有限制,分别是 1000 和 2100。在往SqlServer数据库插入数据时,SqlServer的限制总体插入字符不能大于2100,即如果表中设计21个字段,一次插入10条数据,本次就完成了210个字符的插入,如此算来单次插入数据条数的上限就为100条。所以代码设计时,需要根据表中设计的可扩展的字段数量后,通过后台逻辑进行分批次插入。
表中共30个字段,单次插入70条数据
分批次插入代码如下(示例):
public void batchInsertEmployee(String inPath){ EmployeeDto dto = new EmployeeDto(); List<Object> employeeList = ReadCsvUtils.readCsv(inPath,dto,"\",\""); if(employeeList != null && employeeList.size() > 0){ int k = 0; List<Object> batchInsertData; //每次插入前清空表 dao.truncateEmployee(); if(employeeList.size() <= 70){ dao.insertBatchEmployee(employeeList); } else { for (int j = 0; j < employeeList.size()/70; j++) { batchInsertData = employeeList.subList(k, (j+1)*70); dao.insertBatchEmployee(batchInsertData); k = (j+1)*70; } if(k < employeeList.size()){ batchInsertData = list.subList(k, employeeList.size()); dao.insertBatchEmployee(batchInsertData); } } } }
insertBatchEmployee代码如下(示例):
<insert id="insertBatchEmployee" parameterType="java.util.List" > insert into EMPLOYEE(column1,column2,column3,column4,column5,...,column30) values <foreach collection="list" item="item" separator=","> ( #{item.column1},#{item.column2},#{item.column3},#{item.column4},# {item.column5},...,#{item.column30} ) </foreach> </insert>
SqlServer 插入操作时对语句的条数和参数的数量都有限制,分别是 1000 和 2100。在往SqlServer数据库插入数据时,SqlServer的限制总体插入字符不能大于2100
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。