我是微软 SQL Server 的新手,我不是DB,我有以下问题。
我必须删除名为 VulnerabilityReference
的表中的所有记录所以我执行了这个声明:
delete from VulnerabilityReference;
但我收到此错误消息,并且没有从我的表中删除任何行:
Msg 547, Level 16, State 0, Line 1
The DELETE statement conflicted with the REFERENCE constraint "FK_AlertDocument_Reference_Reference". The conflict occurred in database "DB NAME", table "dbo.VulnerabilityAlertDocument_VulnerabilityReference", column 'VulnerabilityReferenceId'.
The statement has been terminated.
它究竟意味着什么?在将记录删除到 VulnerabilityReference 之前,是否要删除 VulnerabilityAlertDocument_VulnerabilityReference 表中的所有记录?
TNX
Andrea
答案 0 :(得分:1)
此错误是因为您在VulnerabilityReference中有一个与AlerDocument表相关的记录的id。该错误警告您此问题,如果您不首先删除相关记录,则无法删除此记录。
我的意思是名为FK_AlertDocument_Reference_Reference的关系中的表 VulnerabilityAlertDocument_VulnerabilityReference和其他表之间存在关系。您可以转到此表并找到关系,找到以FK开头的名称。在此关系的属性中,您将看到此关系中使用的其他表和列的名称。如果你想要你可以创建一个图表,然后删除这两个表,你将以可视方式看到如何建立关系
答案 1 :(得分:1)
您尝试删除的表具有另一个表中的主键。您必须先删除(或设置为null)另一个表中的列,然后才能删除。这称为DB参照完整性。
您可以禁用约束(如果您有足够的权限),但我建议您不要这样做。
要删除该另一个表中所有记录的链接,您可以执行以下操作:
UPDATE VulnerabilityAlertDocument_VulnerabilityReference
SET VulnerabilityReferenceId = NULL
如果AlertDocument表不允许该列为空,那么您需要DELETE
所有VulnerabilityAlertDocument_VulnerabilityReference记录等...或ALTER
表允许NULL
。确保你知道你将要做什么...
我假设VulnerabilityAlertDocument_VulnerabilityReference表中列的名称,您显然需要使用正确的表名和列名。