【发布时间】:2018-02-26 17:35:02
【问题描述】:
早上好,
我刚接到一项新任务,正在努力寻找合适的解决方案。我已经通过 SO 论坛和 Google 进行了搜索,但没有找到可行的解决方案。以下是我的场景:
我们正在使用 Microsoft Access 通过 ODBC 连接连接到 SQL Server 数据库。
我收到了一个非常大的直通 SQL 查询,比在 MS Access 中能够处理的还要大。在这个传递查询中,WITH...AS 方法中有一个子查询。
我希望能够将这个非常大的 SQL 传递查询拆分为两个:查询一(子查询)和查询二(引用子查询的结果)
我知道通过使用一般 Access 查询,我可以编写如下宏...
Sub myQuery()
' Edited from http://www.dbforums.com/showthread.php?1667831-Run-multiple-queries-in-sequence-on-click
' On Error GoTo ErrHandler
' Run the first query
MsgBox "Starting first query"
DoCmd.OpenQuery "first_Query"
DoEvents
' Run the second query
MsgBox "Done. Now starting second query"
DoCmd.OpenQuery "second_Query"
DoEvents
MsgBox "Done!"
End Sub
但是,这些需要是直通查询。我相信巨大的 SQL 字符串是通过大量用户输入创建的。无论如何,我无法更改给定的传递 SQL。
我是否可以编写一个宏来调用第一个传递查询,然后调用引用第一个结果的第二个传递查询?
这是我正在使用的示例...
WITH queryOne AS
(
SELECT fooID
FROM tblFoo
WHERE foodate > ...
)
SELECT foo, fooone, footwo, foothree
FROM tblOtherFoo
WHERE fooID = OtherFooID
但是,查询是 50000+ 个字符,超过了大约 37k 的限制。
请随时提出任何问题。我对此感到困惑,并希望得到任何反馈或替代资源。
谢谢!
【问题讨论】:
-
一个 9,000 行长的查询是一场噩梦,并且是一个非常明显的迹象,表明某些事情已经非常糟糕了。对于初学者,我会创建一个存储过程,而不是在 Access 中执行此操作。如果您在 Access 中构建查询,则前端和后端是紧密耦合的,这不是一个好习惯。但说真的.....单个查询中有 9,000 行?
-
这听起来很糟糕。 9000线查询??真的。这似乎已经失控了。
-
@SeanLange 我没有写它,它基本上是从我们拥有的这个巨大的采购订单表中选择一堆单独的采购订单。因此,子查询获取 PO ID,第二个获取我们分析所需的其他信息。但是,它只是某些采购订单,整个字符串超过了太多字符。同样,我没有写它,不幸的是我只是试图让它工作。所以我相信你理解我的麻烦。
-
我已经尝试将 SQL 稍微更改为使用别名等以减少要求,但它仍然大大超过了 MS Office 产品的约 37k 左右的限制。
-
我知道不是你写的,但这并没有让它变得不那么可怕。说真的...... 9,000 行不是查询。这比大多数 dotnet 类甚至使用嵌入式 sql 的代码都多。假设您可以在一个页面上放置 100 行,则此查询将是 90 页。那不是询问,而是小说的前三分之一。这需要完全重新考虑和重写。我实际上是糖衣,这太可怕了。
标签: sql sql-server ms-access vba pass-through