Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MS Access和SQL中“删除”和未修改的关系/约束?_Sql_Ms Access_Constraints - Fatal编程技术网

如何在MS Access和SQL中“删除”和未修改的关系/约束?

如何在MS Access和SQL中“删除”和未修改的关系/约束?,sql,ms-access,constraints,Sql,Ms Access,Constraints,我有一个Microsoft Access数据库和两个表。表1有一个主键,表2有一个引用表1主键的外键。此关系在MS Access的关系查看器中设置并可查看,选中“强制引用完整性”复选框,并且联接类型为内部联接。这种关系是: [表1]-1---N-[表2] 我需要能够通过SQL“删除”此关系/约束。我该怎么做?我没有此关系/约束的名称,因为它是在Access中手动设置的,而不是使用SQL。有什么方法可以做我需要做的吗?使用 从中选择关系 msysobject所在的关系= “childtablena

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

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


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

使用

从中选择关系 msysobject所在的关系= “childtablename”和 szReferencedObject='parenttablename'

然后

使用ALTERTABLE命令。类似这样的东西

ALTER TABLE表2删除约束关系1


要删除使用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

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

在Visual Studio Server Explorer中浏览表时,我能够选择未命名约束并按照@Beth的建议将其删除。值得注意的是,VS生成的脚本名为:

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

问题是,‘Relation1’将是约束的名称。正如我提到的,我的约束没有名字,也不知道如何找到它。另外,当我运行此语句时,无论是哪个表,它都会显示“检查约束”“Relation1”“不存在”。尝试此操作以了解约束名称是什么,从Msysrelationships中选择szRelationship,其中szObject='childtablename'和szReferencedObject='parenttablename'@Remou:要更改约束,我必须使用SQL,但是为了得到这个名字,我可以使用任何我需要的资源。我的工作机器上有一份数据库的副本,但真正的副本在生产服务器上,我只能通过SQL访问。那应该很容易,我为VBA添加了一个注释。谢谢你的建议。最后,使用SQL更容易,但我感谢您的帮助。如Mowgli现在所示,本答案第一部分中提到的系统表可以使用SQL访问。我已经更仔细地研究了这一点,不要以为找到这个名字就能解决你的问题。我只能通过SQL访问实时数据库。我在本地的工作机器上有一个副本,但最终只能使用SQL来实现我所需要的。