为什么我无法从此表中删除记录?

时间:2014-03-07 15:48:59

标签: sql sql-server rdbms database

我是微软 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

2 个答案:

答案 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表中列的名称,您显然需要使用正确的表名和列名。