sql-server - 如何从 VBA Excel 返回多个 SELECT 语句
问题描述
我在 Excel 中有一个 VBA 过程设置,可以将一些文本插入 Excel 选项卡,并将其作为命令文本发送,以完成 SQL 查询。
但是,在我的查询中,我有 3 个不同的表要分别返回(因此我的 VBA 代码中有 3 个不同的连接)。
有没有办法使用我的查询来返回三个不同的表,这样我就不必为了在最后获取不同的选择语句而单独运行 3 次查询?
查询代码结束:
SELECT * FROM #MailMergeFormatStep1
SELECT * FROM #MailMergeFormatStep2
SELECT * FROM #MailMergeFormatStep3
我希望运行每个选择语句的结果并将其返回到 Excel 中的单独表连接中。
代码:
Sub UploadCheckerQuery()
ActiveWorkbook.Connections("UploadCheckerConnection1").ODBCConnection.CommandText = Sheets("SQL1").Range("A5:A400").Value
ActiveWorkbook.Connections("UploadCheckerConnection1").Refresh
ActiveWorkbook.Connections("UploadCheckerConnection2").ODBCConnection.CommandText = Sheets("SQL2").Range("A5:A400").Value
ActiveWorkbook.Connections("UploadCheckerConnection2").Refresh
ActiveWorkbook.Connections("UploadCheckerConnection3").ODBCConnection.CommandText = Sheets("SQL3").Range("A5:A400").Value
ActiveWorkbook.Connections("UploadCheckerConnection3").Refresh
End Sub
解决方案
从单个查询返回多个记录集是完全可能的——这就是 ADO 命令 NextRecordset 的用途。完整的详细信息在这里, 但只是简单地使用以下方法加入查询:“SELECT * FROM table1;SELECT * FROM table2”。但是,多个记录集必须位于同一连接上。
Dim rs as new recordset
set rs = connections(1).execute("Select * from table1:select * from table2)
msgbox rs(0)
rs.nextrecordset
msgbox rs(0)
推荐阅读
- sql - 如何在 Firestore 数据库中生成 SQL WHERE IN 或 = ANY() 条件
- apache-superset - Apache Superset:sqllab - 结果后端未配置
- ansible - 如何在ansible中扩展dict,而不是覆盖它?
- python - 为什么在`id(i) is id(j)`中“is”运算符的行为与预期不同?
- android - Android Studio 无法链接到 -l1
- angular - Angular 7:setTimeout 方法在选择标签中不起作用
- android - 将数据返回到recyclerview
- python - 读取csv python时列出索引超出范围
- java - java导入是否专业使用?
- python - 为什么这个 Python“循环代码”不起作用?