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); |