我有一个Microsoft Access数据库,我有两个表。 Table1有一个主键,Table2有一个引用Table1主键的外键。可以在MS Access的“关系”查看器中设置和查看此关系,选中“强制参照完整性”复选框,并且“连接”类型是内部联接。关系是:
[表1] - 1 --------- N - [表2]
我需要能够通过SQL'DROP'这种关系/约束。我该怎么做呢?我没有这个关系/约束的名称,因为它是在Access中手动设置的,而不是SQL。有没有办法做我需要做的事情?
答案 0 :(得分:7)
使用
确定关系SELECT szRelationship FROM Msysrelationships WHERE szObject = 'childtablename'和 szReferencedObject ='parenttablename'
THEN
使用ALTER TABLE命令。沿着这条线的东西
ALTER TABLE Table2 DROP CONSTRAINT Relation1
答案 1 :(得分:3)
要删除以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
答案 2 :(得分:1)
如果你可以在关系查看器中看到它,你可以点击它并从那里删除它。
答案 3 :(得分:0)
在Visual Studio Server Explorer中探索表我能够选择未命名的约束并将其删除(如@Beth建议的那样)。值得注意的是,VS使用它生成了脚本的名称:
GO
ALTER TABLE [dbo].[Organizations] DROP CONSTRAINT [FK__OrgDes__Langu__20C1E124];