我正在为我真的不喜欢的 ASP.NET CMS 重新设计一个应用程序。我在性能上做了一些改进,却发现这个 CMS 不仅使用 MS SQL,而且一些用户“简单地”使用 MS Access 数据库。
问题是我有一些内部连接的表,MS Access 版本位于两个不同的文件中。我不能简单地将表移动到另一个 mdb 文件。
我现在正试图找出一种跨多个访问数据库文件“内部连接”的好方法?
如果我已经获取了所有数据并以编程方式进行操作,那将是非常遗憾的!
谢谢
我正在为我真的不喜欢的 ASP.NET CMS 重新设计一个应用程序。我在性能上做了一些改进,却发现这个 CMS 不仅使用 MS SQL,而且一些用户“简单地”使用 MS Access 数据库。
问题是我有一些内部连接的表,MS Access 版本位于两个不同的文件中。我不能简单地将表移动到另一个 mdb 文件。
我现在正试图找出一种跨多个访问数据库文件“内部连接”的好方法?
如果我已经获取了所有数据并以编程方式进行操作,那将是非常遗憾的!
谢谢
您根本不需要链接表。有两种方法可以使用来自不同 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'
然后,您可以保存这些查询,然后使用保存的查询连接这两个表。
或者,您可以通过在 FROM 子句中为每个表指定源 MDB 的路径来在单个 SQL 语句中管理它,如下所示:
SELECT MyTable.ID, OtherTable.OtherField
FROM [c:\MyDBs\Access.mdb].MyTable
INNER JOIN [c:\MyDBs\Other.mdb].OtherTable ON MyTable.ID = OtherTable.ID
但请记住一件事:
Jet 查询优化器不一定能够将这些表中的索引用于连接(是否将它们用于单个字段的标准是另一个问题),所以这可能非常慢(在我的测试中,它不是,但我没有使用大数据集进行测试)。但是这个性能问题也适用于链接表。
如果您有权访问 MDB,并且能够更改它们,您可能会考虑使用链接表。Access 提供了链接到外部数据(在其他 MDB、Excel 文件中,甚至在 SQL Server 或 Oracle 中)的能力,然后您可以针对这些链接执行联接。
我强烈鼓励对这种选项进行性能测试。如果将 Access 数据库的用户迁移到另一个系统(甚至是 SQL Express)是可行的,那也是可取的——上次我检查过,不再有 64 位的 ODBC JET 驱动程序,所以如果应用程序曾经托管在在 64 位环境下,这些用户将被淹没。
在一个访问数据库中,您可以创建指向另一个数据库的“链接表”。您应该(我认为)能够查询这些表,就好像它们都存在于同一个数据库中一样。
这确实意味着您必须更改其中一个数据库来创建虚拟表,但至少您实际上并没有移动数据,只是创建了一个指向它的指针
在 Access 中,您可以通过“链接表管理器”添加远程表。您可以将链接添加到一个 Access 文件或另一个,或者您可以创建一个引用两个文件中的表的新 Access 文件。完成此操作后,内部连接查询与在单个数据库中执行它们没有什么不同。