[英]How to perform this delete operation on a DB?
我有以下问题
我在一个名为VulnerabilityAlertDocument和VulnerabilityReference的数据库上有2个表,它们由另一个名为VulnerabilityAlertDocument_VulnerabilityReference的表绑定到ggterter,它只包含2个字段:第一个表的Id( VulnerabilityAlertDocument )和第二个表的ID( VulnerabilityReference )
现在,如果我尝试从VulnerabilityAlertDocument SQL服务器中删除记录,请告诉我我不能这样做因为存在参照完整性约束。
因此,如果我想从VulnerabilityAlertDocument中删除记录,我必须执行以下操作:
我认为这可能是一个正确的解决方案,但我有一些问题需要了解如何在VulnerabilityAlertDocument_VulnerabilityReference中存储选择结果
你能帮助我吗?
我认为你的操作顺序错了。 你需要做的就是:
你拥有它的方式,你将再次遇到同样的问题。 在VulnerabilityAlertDocument_VulnerabilityReference中删除相关记录之前,无法删除VulnerabilityReference。
您还可以向外键添加级联删除。 这将自动处理相关子行的删除:
ALTER TABLE [dbo].[VulnerabilityAlertDocument_VulnerabilityReference]
WITH CHECK ADD CONSTRAINT
[FK_VulnerabilityAlertDocument_VulnerabilityReference]
FOREIGN KEY([VulnerabilityReferenceID])
REFERENCES [dbo].[VulnerabilityAlertDocument] ([VulnerabilityReferenceID])
ON UPDATE CASCADE
ON DELETE CASCADE
你正在混合参考
VulnerabilityAlertDocument
VulnerabilityReference
VulnerabilityAlertDocument_VulnerabilityReference
这与其他两个表有FK
如果要从VulnerabilityAlertDocument中删除行,则必须先从VulnerabilityAlertDocument_VulnerabilityReference中删除任何引用它的行。
这是两个简单的操作
delete VulnerabilityAlertDocument_VulnerabilityReference where docID = x
delete VulnerabilityAlertDocument where docID = x
漏洞参考中的混合是不同的
您不能简单地获取docID = x的refID并从VulnerabilityReference中删除它们
其他docID可能具有相同的refID
为此你需要这样的东西
delete toDelete
from VulnerabilityReference as toDelete
join VulnerabilityAlertDocument_VulnerabilityReference
on toDelete.refID = VulnerabilityAlertDocument_VulnerabilityReference.refID
and VulnerabilityAlertDocument_VulnerabilityReference.docID = x
left join VulnerabilityReference as toKeep
on toKeep.refID = VulnerabilityAlertDocument_VulnerabilityReference.refID
and VulnerabilityAlertDocument_VulnerabilityReference.docID <> x
where toKeep.refID is null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.