如何使用 SQL 重命名具有关系的 MS Access 表?

Posted

技术标签:

【中文标题】如何使用 SQL 重命名具有关系的 MS Access 表?【英文标题】:How to rename MS Access table with relationships using SQL? 【发布时间】:2017-07-27 01:41:18 【问题描述】:

我正在从外部 .Net 应用程序连接到 MS Access 数据库。我需要使用 SQL 来升级数据库的架构。部分升级需要重命名属于一对多关系的表。

我了解在 MS Access 中使用 SQL 实际重命名表是不可能的。我的研究使我找到了以下解决方案。

SELECT * INTO OldTableName FROM NewTableName
DROP TABLE OldTableName

这似乎适用于不属于关系的表。但是,如果表属于关系,则在运行 DROP TABLE SQL 时会收到以下异常。

Cannot delete this index or table.  It is either the current index or is used in a relationship.

有没有一种方法可以通过 SQL 更新 MS Access 中的关系以指向已创建的新表,以便删除旧表?

【问题讨论】:

删除表之前需要先删除旧的外键约束,然后再新建一个 好的,但是你能详细说明一下吗?也许使用一些 SQL,这是我想要弄清楚的。 【参考方案1】:

您可以通过简单地使用 Access DAO 重命名表来省去一些麻烦:

using Microsoft.Office.Interop.Access.Dao;

namespace AccessDaoConsoleApp

    class Program
    
        static void Main(string[] args)
        
            var dbe = new DBEngine();
            Database db = dbe.OpenDatabase(@"C:\Users\Public\Database1.accdb");
            TableDef tbd = db.TableDefs["OldTableName"];
            tbd.Name = "NewTableName";
            db.Close();
        
    

.NET 项目需要访问 DAO 的 COM 引用。我用的是

Microsoft Office 14.0 Access 数据库引擎对象库

【讨论】:

这需要最终用户的计算机安装 Office,对吗? @user1227445 - 不,Access DAO 是 Access 数据库引擎的一部分。如果他们可以做 Access OLEDB/ODBC 那么他们也可以做 Access DAO。 但这从何而来?最终用户必须安装 Access,对吗? 澄清一下,最终用户没有使用 Access。他们正在使用我的应用程序,它恰好在后台使用 Access 格式数据库,该数据库由第 3 方库管理,因此用户无需安装 Access 即可让我的应用程序工作。 @user1227445 - 许多应用程序使用Access Database Engine 没有安装完整版本的 Microsoft Access(单独安装,或作为 Microsoft Office 的一部分)。这个“第 3 方库”是使用 Access 数据库引擎,还是使用其他类似 UCanAccess 的方法(它使用 Jackcess 修改数据库文件)?【参考方案2】:

您应该首先删除外键约束。如何使用 SQL 执行此操作,您可以看到例如 here。然后创建新的约束:

alter table City
   add constraint FK_City_REF_States foreign key (ID_State)
      references States (ID_State);

【讨论】:

我最近才发现同样的帖子,并尝试完全按照你说的做。问题是,当我尝试删除约束时,我得到一个错误,告诉我我没有权限从 Msysrelationships 中读取,所以这基本上扼杀了这个想法。如果您实际上无法从该表中读取,不确定为什么它被接受为该问题的答案。 有几种方法可以从Access外部读取这个表,你可以搜索这个。但实际上,如果数据库在您的控制之下并且没有动态更改,则您不需要从外部读取此表。只需打开accdb一个Access,读取一次约束名称并在.net代码中使用它们

以上是关于如何使用 SQL 重命名具有关系的 MS Access 表?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2007 重命名自定义组中的快捷方式以更改对象的名称

使用 SQL 重命名 MS Access 中的列

在 MS SQL 服务器中重命名表名。需要更改[重复]

需要在 MS Access 中使用链接表更改 sql server 数据库名称

使用 MS Access SQL 查询创建与现有表具有一对一关系的第二个表

sql [AS]显示具有不同名称的表列(未在原始表中重命名)#SQL