sql - 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
解决方案
解决了这个!
出于某种原因,将 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]"
推荐阅读
- c# - Kafka-Net 中生成的消息中没有时间戳
- angular - 如何将 Angular 控制器连接到 HTML?
- java - ElementType 参数的自定义注释
- javascript - 在查询nodejs中添加一个字符串数组
- listview - 仅针对 xamarin 中的特定列表项隐藏列表视图中的行
- c# - 无法从模型中获取价值并放置在输出 C# MVC 中
- django - 202 Accepted 响应的正确设计模式
- c# - 如何将我的 Entity Framework SqlQuery 转换为我的实体列表?
- java - JAVA 的 System.out.println 和其他 PrintStream 方法是否有抛出异常的替代品?
- php - PHP loop to retrieve each instance of a specific piece of data from within decoded JSON