如何使用SQL在MS Access中'DROP'和解除关系/约束?

Mik*_*ebb 4 sql ms-access constraints

我有一个Microsoft Access数据库,我有两个表.Table1有一个主键,Table2有一个引用Table1主键的外键.可以在MS Access的"关系"查看器中设置和查看此关系,选中"强制参照完整性"复选框,并且"连接"类型是内部联接.关系是:

[表1] - 1 --------- N - [表2]

我需要能够通过SQL'DROP'这种关系/约束.我该怎么做呢?我没有这个关系/约束的名称,因为它是在Access中手动设置的,而不是SQL.有办法做我需要做的事吗?

m0g*_*m0g 7

确定使用的关系

SELECT szRelationship FROM Msysrelationships WHERE szObject ='childtablename'和szReferencedObject ='parenttablename'

然后

使用ALTER TABLE命令.沿着这条路线的东西

ALTER TABLE表2 DROP CONSTRAINT Relation1


Fio*_*ala 5

要删除使用 GUID 命名的关系(因为在关系窗口中创建的关系已命名),您需要使用方括号,如下所示:

ALTER TABLE TableName 
DROP CONSTRAINT [{0992AADA-3921-4AC0-8E95-745A87709D91}]
Run Code Online (Sandbox Code Playgroud)

使用系统表 MsysRelationships 查找关系的名称并不太困难,列是:

ccolumn
grbit
icolumn 
szColumn    
szObject    
szReferencedColumn  
szReferencedObject  
szRelationship
Run Code Online (Sandbox Code Playgroud)

在您的情况下,该名称将是一个 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
Run Code Online (Sandbox Code Playgroud)