跨服务器的表连接,通用方法

Posted

技术标签:

【中文标题】跨服务器的表连接,通用方法【英文标题】:Table joins across servers, generic method 【发布时间】:2012-06-22 03:33:14 【问题描述】:

我还没有看到像 MS Access 这样的应用程序,它可以让您链接到远程服务器上的各种技术的表,然后执行包括跨这些不同来源的连接的查询。我发现 Access 可以链接到 Sql Server 上的一个表、Oracle 上的另一个表,甚至是本地基于文件的数据库,然后允许执行查询加入它们,这有点令人惊讶。

所以我的编程相关问题是:如果要开发可以做到这一点的软件,应该如何去做? Access 是否使用现有数据库技术的某些内置功能来执行此操作?即,OleDB 或 ODBC 或某些技术是否内置了此功能,或者 Access 是否自行完成了许多专有的繁重工作?

如果 Access 自己完成所有这些工作,那么在新项目中重现这似乎是一件相当困难的事情。我只是好奇我们在这里谈论的复杂程度,以及某些现有的数据库技术层是否已经内置了这个。

【问题讨论】:

我应该补充一下 - 这种能力是否以某种方式内置于 Jet 引擎中? AFAIK,Access 在本地传输和执行来自所有这些数据源的所有数据。这在通用访问方面很棒,但会降低性能。 @Lieven Access 只有在无法利用索引(例如查询设计不当时)才能在本地获取数据。 @Remou - 来自不同数据源的数据? Access 怎么会知道如何将 SQLServer.TableA 与 Oracle.TableB 连接起来,而无需将所有相关数据都放在本地? @Lieven 我以为你在谈论 MS Access 总是传输整个表的常见误解:) (technet.microsoft.com/en-us/library/cc722917.aspx) 【参考方案1】:

连接来自不同数据源的表的任务比看起来更难,即使您只是将自己限制为单个数据库 API(如 ODBC)。 ODBC 没有任何内置的功能来支持这一点。查看 ODBC 的 SQLGetInfo、SQLGetConnectAttr 和 SQLGetStatementAttr API,您会发现 ODBC 驱动程序之间可能存在的差异。

有一个适用于 Windows 的 SQLEngine,它将连接不同的 ODBC 数据源,这些数据源都可以连接到 ODBC-ODBC Join Engine 上的不同数据库

更新:披露 - 我为 Easysoft 工作。

【讨论】:

我忘记了披露 - 抱歉 - 已更正。在我的 90 个答案中,您会看到我没有推广我们软件的习惯,这是一个答案。 bohica,你说access中的喷气发动机和这个产品有什么相同之处?谢谢 是的。在 ODBC 中肯定没有什么可以做到这一点。顺便说一句,如果你决定写类似的东西,祝你好运。特别是分组和排序等将是一个 PITA。除此之外,如果您使用 ODBC,您会惊讶于每个驱动程序的行为有多么不同(请参阅我在回答中提到的那些 API 调用)。

以上是关于跨服务器的表连接,通用方法的主要内容,如果未能解决你的问题,请参考以下文章

跪求 DES跨(C# Android IOS)三个平台通用的加解密方法

Java连接MySQL数据库增删改查通用方法

socket网口通信通用实例

怎样写一个通用的JDBC查询方法

koa,express,node 通用方法连接MySQL

跨 WCF Web 服务请求序列化通用 XML 数据