代码之家  ›  专栏  ›  技术社区  ›  Mike Webb

如何在使用SQL的MS Access中“删除”和未定义的关系/约束?

  •  4
  • Mike Webb  · 技术社区  · 14 年前

    我有一个Microsoft Access数据库和两个表。表1有一个主键,表2有一个引用表1的主键的外键。此关系在MS Access中的关系查看器中设置并可查看,选中“强制引用完整性”复选框,并且联接类型是内部联接。关系是:

    [表1]--1------n--[表2]

    我需要能够通过SQL“删除”这个关系/约束。我该怎么做?我没有此关系/约束的名称,因为它是在Access中手动设置的,而不是使用SQL设置的。有什么方法可以做我需要做的事吗?

    4 回复  |  直到 7 年前
        1
  •  7
  •   m0g    14 年前

    确定关系使用

    从中选择szrelationship msysrelationships其中szObject= “ChildTableName”和 szReferencedObject='ParentTableName'

    然后

    使用alter table命令。沿着这条线

    更改表table2删除约束关系1

        2
  •  3
  •   Fionnuala    14 年前

    要删除名为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
    
        3
  •  1
  •   Beth    14 年前

    如果您可以在关系查看器中看到它,您可以单击它并从中删除它。

        4
  •  0
  •   Reci    7 年前

    在Visual Studio服务器资源管理器中浏览表时,我能够选择未命名的约束并将其删除(如@beth建议的那样)。值得注意的是,vs生成的脚本带有它的名称:

    GO
    ALTER TABLE [dbo].[Organizations] DROP CONSTRAINT [FK__OrgDes__Langu__20C1E124];