如何使用 SQL 在 MS Access 中“删除”和未命名的关系/约束?
Posted
技术标签:
【中文标题】如何使用 SQL 在 MS Access 中“删除”和未命名的关系/约束?【英文标题】:How do I 'DROP' and unamed relationship/constraint in MS Access with SQL? 【发布时间】:2010-08-12 14:31:10 【问题描述】:我有一个 Microsoft Access 数据库,我有两个表。 Table1 有一个主键,Table2 有一个引用 Table1 主键的外键。此关系在 MS Access 的关系查看器中设置和查看,选中“强制引用完整性”复选框,连接类型为内部连接。关系是:
[Table1]--1---------N--[Table2]
我需要能够通过 SQL“删除”这个关系/约束。我该怎么做呢?我没有此关系/约束的名称,因为它是在 Access 中手动设置的,而不是使用 SQL。有没有办法做我需要做的事?
【问题讨论】:
【参考方案1】:确定关系使用
选择 szRelationship FROM Msysrelationships WHERE szObject = 'childtablename' 和 szReferencedObject = '父表名'
那么
使用 ALTER TABLE 命令。类似的东西
ALTER TABLE Table2 DROP CONSTRAINT Relation1
【讨论】:
问题是“Relation1”将是约束的名称。正如我所提到的,我的约束没有名称,也不知道如何找到它。此外,当我使用任一表运行此语句时,它会显示“CHECK 约束 'Relation1' 不存在。” 试试这个找出约束名称是什么 SELECT szRelationship FROM Msysrelationships WHERE szObject = 'childtablename' and szReferencedObject = 'parenttablename'【参考方案2】:要删除以 GUID 命名的关系,因为在关系窗口中创建的关系被命名,您需要使用方括号,如下所示:
ALTER TABLE TableName
DROP CONSTRAINT [0992AADA-3921-4AC0-8E95-745A87709D91]
使用系统表MsysRelationships查找关系名称并不难,列是:
ccolumn
grbit
icolumn
szColumn
szObject
szReferencedColumn
szReferencedObject
szRelationship
在您的情况下,名称将是一个 GUID,例如 A869FC34-81AF-4D29-B81D-74180BF73025
您还可以使用 VBA 和 ADO 架构来列出关系。
如果您想说出您可以使用什么,建议一种合适的方法来获取名称会更容易。
在 VBA 中编辑
Sub ListRelations()
Dim rel As DAO.Relation
For Each rel In CurrentDb.Relations
Debug.Print rel.Name
Debug.Print rel.ForeignTable
Debug.Print rel.Table
For Each fld In rel.Fields
Debug.Print fld.Name
Next
Next
End Sub
【讨论】:
@Remou:要更改约束,我必须使用 SQL,但要获得名称,我可以使用我需要的任何资源。我的工作机器上有一个数据库副本,但真正的数据库在我只能通过 SQL 访问的生产服务器上。 那应该很简单,我已经为 VBA 添加了一个注释。 感谢您的建议。使用 SQL 更容易完成,但我感谢您的帮助。 本答案第一部分中提到的系统表可以使用 SQL 访问,如 Mowgli 现在所示。 我已经对此进行了更仔细的研究,并且不认为找到名称会解决您的问题。【参考方案3】:如果您可以在关系查看器中看到它,您可以单击它并从那里将其删除。
【讨论】:
我只能通过 SQL 访问实时数据库。我在本地工作机器上有一个副本,但最终只能使用 SQL 来实现我需要的。【参考方案4】:在 Visual Studio 服务器资源管理器中探索表我能够选择未命名的约束并将其删除(如 @Beth 建议的那样)。值得注意的是,VS 生成的脚本名称为:
GO
ALTER TABLE [dbo].[Organizations] DROP CONSTRAINT [FK__OrgDes__Langu__20C1E124];
【讨论】:
以上是关于如何使用 SQL 在 MS Access 中“删除”和未命名的关系/约束?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL 在 MS Access 数据库中“显示表”?