DELETE语句与REFERENCE约束冲突

use*_*665 2 sql sql-server

我收到了错误

DELETE语句与REFERENCE约束FK_DocYDocument1冲突 - 表DocYDocument,列SubDocID - 语句:DELETE FROM DOCUMENT WHERE(ID =?)参数:'D7FAA3CF ...'

表DocYDocument包含列

PK ID, FK DocID and FK SubDocID. 
And the keys PK_DocYDocument, FK_DocYDocument and FK_DocYDocument1.
Run Code Online (Sandbox Code Playgroud)

FK_DocYDocument1外键列是SubDocID,FK_DocYDocument外键列是DocID.

数据库设计有问题还是我要在程序中查找错误?

Mar*_*rot 8

您有行DocYDocument指的是DOCUMENT您要删除的行.

您必须从DocYDocument匹配中删除行DocID

DELETE FROM DocYDocument WHERE DocID = ?
DELETE FROM DOCUMENT WHERE ID = ?
Run Code Online (Sandbox Code Playgroud)

或更改约束以自动执行此操作

ALTER TABLE DocYDocument
  DROP CONTRAINT FK_DocYDocument;
ALTER TABLE DocYDocument
  ADD CONSTRAINT FK_DocYDocument
    FOREIGN KEY ( DocID )
    REFERENCES DOCUMENT ( ID )
    ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)

如果DocID你可以ON DELETE SET NULL,如果可以为空,你可以做.