【问题标题】:SQL From Excel VBA: Create a temporary table in VBA (for reuse) from a SQL querySQL From Excel VBA:从 SQL 查询在 VBA 中创建一个临时表(以供重用)
【发布时间】:2017-11-02 06:07:03
【问题描述】:

我一直在寻找一种直接的方法来做到这一点,但我遇到的大多数答案都是切线而不是直接解决问题。

这是我试图通过 VBA 运行的简化 SQL sn-p

SELECT * INTO ##Customers FROM Addresses 
SELECT * FROM ##Customers a LEFT JOIN PostageRate b ON a.ZipCode=b.ZipCode 

然后我需要将所有这些数据放入 Excel 工作表中。

到目前为止,我能够执行:

SELECT * FROM Addresses 

这是没有临时表的第一个查询的功能等价物。我得到了RecordSet,然后我使用CopyFromRecordSet 将其放入工作表中,但我不知道如何将RecordSet 转换为表,因此我可以在第二个查询中查询它 LEFT JOIN,然后将生成的RecordSet 放在工作表上。

我尝试运行的查询自然比这个更复杂,但这说明了我想要实现的目标。

抱歉,如果我错过了一个回答这个问题的帖子,但我还没有遇到它。

谢谢!

编辑:我已经考虑将第一个查询中的数据放到工作表上,并将工作表视为第二个查询的表。问题如下: 该工作表是本地的,第二个表在数据库上。根据this question,数据库需要能够访问 Excel 工作表。它不是。任何有关如何通过 VBA 实现临时表的更多见解将不胜感激。谢谢大家!

【问题讨论】:

  • 您可以使用 ACE.OLEDB 提供程序通过 ADODB 查询 excel 表。工作表就是表格。
  • 我不明白为什么你不能只使用子查询,或者有一个构建临时表的表值函数。为什么excel中需要临时表存在?我想如果您的第二个查询是在不同的数据源上,这将是有意义的......
  • @JeffUK 我不介意临时表是在数据库服务器而不是本地表中创建的。你能指出我通过 Excel VBA 做到这一点的正确方向吗?感谢您的帮助!
  • @jivko 我想我可以做到。我希望在内存中完成这一切,而不是在使用它之前吐在一张纸上。不过,我的思考过程没有很好的逻辑基础,只是感觉……不优雅……感谢您的帮助!
  • 我会说,在服务器中创建一个视图,然后在excel中查询该视图并导入。如果我要做复杂的事情,我会尽可能多地使用数据库工具。

标签: sql sql-server vba excel


【解决方案1】:
SELECT * FROM 
(SELECT * from [Addresses]) AS Customer 
LEFT JOIN PostageRate 
ON (customer.zipcode = PostageRate.zipcode)

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多