跨多个访问数据库的内部联接

时间:2008-09-22 20:51:10

标签: asp.net ms-access inner-join

我正在重新设计一个我真的不喜欢的ASP.NET CMS应用程序。我已经对性能进行了改进,但发现这个CMS不仅使用MS SQL,而且一些用户“只是”使用MS Access数据库。

问题是我有一些内部加入的表,MS Access版本有两个不同的文件。我不允许简单地将表移动到另一个mdb文件。

我现在正试图找出跨多个访问数据库文件“内连接”的好方法吗?

如果我获取所有数据并以编程方式执行它真的很可惜!

由于

4 个答案:

答案 0 :(得分:11)

根本不需要链接表。使用来自不同MDB的数据有两种方法可以在没有链接表的情况下使用。第一种是在SQL的FROM子句中使用“IN'c:\ MyDBs \ Access.mdb'”。您保存的一个查询将是:

SELECT MyTable.*
FROM MyTable IN 'c:\MyDBs\Access.mdb'

,另一个保存的查询将是:

SELECT OtherTable.*
FROM OtherTable IN 'c:\MyDBs\Other.mdb'

然后,您可以保存这些查询,然后使用保存的查询来连接这两个表。

或者,您可以在单个SQL语句中通过为FROM子句中的每个表指定源MDB的路径来管理它:

SELECT MyTable.ID, OtherTable.OtherField
FROM [c:\MyDBs\Access.mdb].MyTable 
  INNER JOIN [c:\MyDBs\Other.mdb].OtherTable ON MyTable.ID = OtherTable.ID

记住一件事:

Jet查询优化器不一定能够使用这些表中的索引进行连接(是否将它们用于各个字段的标准是另一个问题),所以这可能非常慢(在我的测试中,它不是,但我没有使用大数据集来测试)。但是,该性能问题也适用于链接表。

答案 1 :(得分:3)

如果您有权访问MDB并且能够更改它们,则可以考虑使用链接表。 Access提供链接到外部数据的能力(在其他MDB中,在Excel文件中,甚至在SQL Server或Oracle中),然后您可以对链接执行连接。

我强烈鼓励对此类选项进行性能测试。如果将Access数据库的用户迁移到另一个系统(甚至SQL Express)是可行的,那也是可取的 - 最后我检查过,不再有用于ODBC的64位JET驱动程序,所以如果应用程序曾经托管过一个64位的环境,这些用户将被冲洗。

答案 2 :(得分:1)

在一个访问数据库中,您可以创建指向另一个数据库的“链接表”。您应该(我认为)能够查询表,就好像它们都存在于同一个数据库中一样。

这确实意味着您必须更改其中一个DB来创建虚拟表,但至少您实际上并没有移动数据,只是指向它的指针

答案 3 :(得分:0)

在Access中,您可以通过“链接表管理器”添加远程表。您可以将链接添加到一个Access文件或另一个文件,或者您可以创建一个引用两个文件中的表的新Access文件。完成此操作后,内部联接查询与在单个数据库中执行它们没有什么不同。

相关问题