关于.net:如何使用SQL使用关系重命名MS Access表?

How to rename MS Access table with relationships using SQL?

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

我了解实际上无法使用SQL在MS Access中重命名表。我的研究使我找到了以下解决方案。

1
2
SELECT * INTO OldTableName FROM NewTableName
DROP TABLE OldTableName

对于不属于关系的表,这似乎可以正常工作。但是,如果表属于某个关系,则在运行DROP TABLE SQL时会收到以下异常。

1
Cannot DELETE this INDEX OR TABLE.  It IS either the CURRENT INDEX OR IS used IN a relationship.

通过SQL是否可以更新MS Access中的关系以指向已创建的新表,以便可以删除旧表?


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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项目需要Access DAO的COM参考。我用的是

Microsoft Office 14.0 Access Database Engine Object Library


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

1
2
3
ALTER TABLE City
   ADD CONSTRAINT FK_City_REF_States FOREIGN KEY (ID_State)
      REFERENCES States (ID_State);