我正在为我真的不喜欢的ASP.NET内容管理系统重新设计一个应用程序。我在性能上做了一些改进,只是发现这个CMS不仅使用MS SQL,而且一些用户“简单”地使用MS Access数据库。
问题是我有一些表,我内部连接,与MS Access版本是在两个不同的文件中。不允许我简单地将表移动到另一个mdb文件中。
我现在正在尝试找出一种跨多个访问数据库文件的“内部连接”的好方法?
如果我已经获取了所有的数据并以编程的方式去做,那就太遗憾了!
谢谢
发布于 2008-09-22 21:04:11
如果您有权访问MDB,并且能够对其进行更改,则可以考虑使用链接表。Access提供了链接到外部数据(在其他MDB、Excel文件中,甚至在SQL Server或Oracle中)的功能,然后您可以对这些链接执行联接。
我强烈建议进行这样的性能测试。如果将Access数据库的用户迁移到另一个系统(即使是SQL Express)是可行的,那也是可取的--据我所知,ODBC不再有64位JET驱动程序,所以如果应用程序托管在64位环境中,这些用户将被软管。
发布于 2008-09-22 23:33:19
你根本不需要链接表。有两种方法可以使用来自不同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查询优化器不一定能够使用这些表中的索引进行连接(是否将它们用于单个字段的标准是另一个问题),因此这可能会非常慢(在我的测试中,不是,但我没有使用大数据集进行测试)。但是这个性能问题也适用于链接表。
发布于 2008-09-22 21:05:24
在一个access数据库中,您可以创建指向另一个数据库的“链接表”。您应该(我认为)能够查询表,就好像它们都存在于同一个数据库中一样。
这确实意味着您必须更改其中一个DB才能创建虚拟表,但至少您实际上并没有移动数据,只是创建了一个指向它的指针
https://stackoverflow.com/questions/117558
复制相似问题