SQL CopyFromRecordSet стал медленным - автоматическая упаковка и размер - PullRequest
0 голосов
/ 18 июня 2019

Использование Excel VBA для извлечения данных из MS SQL в Excel.Это всего 2000 строк и 30 столбцов, но выполнение строки .CopyFromRecordset занимает более 10 минут.

Я считаю, что виновником является тот факт, что при вставке в Excel из SQL происходит автоматическое форматирование.Я заметил, что перенос текста происходит автоматически, а также некоторые размеры строк и столбцов.Не уверен, как это отключить.

Любая помощь будет принята с благодарностью!

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

1 Ответ

0 голосов
/ 18 июня 2019

Решил это!

По какой-то причине изменение оператора SELECT в коде VBA на хранимый процесс SQL и последующее его выполнение таким образом устранили возникшие проблемы с автоматическим форматированием и увеличили время выполнения с 8 минут до 2 секунд.

Ни в коем случае не изменял оператор SQL в MS SQL или хранимых процедурах. Кто-нибудь может дать представление о том, почему это решило проблему?

    Server_Name = "eq-t-sql01"
    Database_Name = "HSCSN_REFERENCE_TABLES"
    SQLStr = "[EPSDT_Call_Log_with_Member_Info]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...