不使用For循环将范围从Excel复制到SQL?

时间:2015-08-28 09:11:18

标签: sql-server excel vba sql-server-2008 excel-vba

我想从Excel工作表到SQL表复制范围(可以是Set DataRange = ValidSheet.Range("C22:C81")之类的列或Set DataRange = ValidSheet.Range("C22:F81")之类的几列)。

但是,互联网上的一些示例建议使用DataRange(i)作为aray,然后使用For i = 1 to 59循环按单元格复制每个值单元格,如:

For i = 1 to 59
   SQL = "INSERT INTO Table_test (Column1) VALUES (" & DataRange(i) & ")"
Next

有没有直接的方法可以在不使用循环的情况下一次复制整个范围?

1 个答案:

答案 0 :(得分:3)

我建议使用循环 - 但是改变策略 - 因为INSERT语句比Excel内部逻辑更加密集且可能会变慢。

因此,我倾向于创建一个包含所有值的循环 - 一个接一个,例如:

For i = 1 to 59
if i = 1 then
   SQL = "INSERT INTO Table_test (Column1) VALUES (" & DataRange(i) & "),"
elseif i < 59 then
   SQL = SQL & " (" & DataRange(i) & "), "
else
   SQL = SQL & " (" & DataRange(i) & ")"
End if
Next i

   SQL.execute

这将创建一个包含所有值的大丑陋字符串,但不会花费太长时间 - 当然对于这些行数。

如果你的工作量不超过几千,你可以创建一个范围的临时文本文件,并使用&#39; LOAD FROM FILE&#39; - 这比这些个体经营者要快得多。