【问题标题】:Copying Range from Excel to SQL without using For loop?将范围从 Excel 复制到 SQL 而不使用 For 循环?
【发布时间】:2015-11-22 21:35:27
【问题描述】:

我想从我的 Excel 工作表中复制一个范围(可以是像 Set DataRange = ValidSheet.Range("C22:C81") 这样的一列或像 Set DataRange = ValidSheet.Range("C22:F81") 这样的多列)到 SQL 表。

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

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

有没有不使用循环一次复制整个范围的直接方法?

【问题讨论】:

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


    【解决方案1】:

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

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

    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
    

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

    但是,如果您执行的操作超过几千个,则可以创建该范围的临时文本文件,然后使用“LOAD FROM FILE”导入 - 这比这些单独的运算符要快得多。

    【讨论】:

    • 为什么需要if-loop?不能只有For-loop 自己做同样的工作吗?
    • @user3714330 你需要 if 因为有第一行和最后一行,中间还有几行
    • 确实,在这种情况下,我将整个图片构建在一个循环中 - 所以您只需要第一行一次,然后您需要每次添加值并在末尾添加一个逗号,那么最后一条语句不需要逗号(并且会导致 SQL 失败)
    • 感谢您的提示,由于其他一些错误,我现在无法测试它,但它似乎是一个合理的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 2016-05-21
    • 1970-01-01
    • 2015-10-17
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多