首页 > 解决方案 > SQL CopyFromRecordSet 变慢 - 自动包装和调整大小

问题描述

使用 Excel VBA 将数据从 MS SQL 提取到 Excel 中。它只有 2,000 行和 30 列,但执行该行需要 10 多分钟.CopyFromRecordset

我认为罪魁祸首是当它从 SQL 粘贴到 Excel 时,会发生一些自动格式化。我注意到自动换行以及一些行和列大小。不知道如何关闭它。

任何帮助将不胜感激!

Sub ADOExcelSQLServer()

   ' Objects 2.x library     

    Dim Cn As ADODB.Connection
    Dim Server_Name As String
    Dim Database_Name As String
    Dim User_ID As String
    Dim password As String
    Dim SQLStr As String
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset

    Server_Name = "eq-t-sql01" 
    Database_Name = "HSCSN_DR" 
    SQLStr = "SELECT e.*, m.DOB FROM [HSCSN_DR].[dbo].[EPSDT_Call_Log_Answers] e join HSCSN_DR..Q_MEMBERS m on m.MedicaidID = e.MedicaidID Order By [Attempt 1 Date] Desc, MedicaidID"

    Set Cn = New ADODB.Connection
    Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & ";Trusted_connection=yes;"
    '& _";Uid=" & User_ID & ";Pwd=" & Password & ";"

    rs.Open SQLStr, Cn, adOpenStatic
     ' Dump to spreadsheet
    With Worksheets("Data").Range("A2") ' Enter your sheet name and range here
        .ClearContents
        .CopyFromRecordset rs
    End With

    rs.Close
    Set rs = Nothing
    Cn.Close
End Sub

标签: sqlsql-servervba

解决方案


解决了这个!

出于某种原因,将 VBA 代码中的 SELECT 语句更改为 SQL 存储过程,然后以这种方式执行它消除了正在发生的自动格式化问题,并将执行时间从 8 分钟增加到 2 秒。

在 MS SQL 或存储过程中无论如何都没有更改 SQL 语句。谁能提供有关为什么这解决了问题的见解?

    Server_Name = "eq-t-sql01"
    Database_Name = "HSCSN_REFERENCE_TABLES"
    SQLStr = "[EPSDT_Call_Log_with_Member_Info]"

推荐阅读