Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
如何在SQL中创建多个引用完整性条件_Sql_Sql Server - Fatal编程技术网

如何在SQL中创建多个引用完整性条件

如何在SQL中创建多个引用完整性条件,sql,sql-server,Sql,Sql Server,我有一个SQL语句,它应该为我添加一些约束。在该语句中,我想在两个约束上设置两个引用完整性条件 以下是我的声明: ALTER TABLE Vertraege ADD CONSTRAINT FK_Kunde_Vertraege FOREIGN KEY(K_ID) REFERENCES Kunde(K_ID), CONSTRAINT FK_Standort_Vertraege FOREIGN KEY(S_ID) REFERENCES Standort(

我有一个SQL语句,它应该为我添加一些约束。在该语句中,我想在两个约束上设置两个引用完整性条件

以下是我的声明:

ALTER TABLE Vertraege
    ADD CONSTRAINT FK_Kunde_Vertraege FOREIGN KEY(K_ID)
        REFERENCES Kunde(K_ID),
    CONSTRAINT FK_Standort_Vertraege FOREIGN KEY(S_ID)
        REFERENCES Standort(S_ID) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT FK_Mitarbeiter_Vertraege FOREIGN KEY(M_ID)
        REFERENCES Mitarbeiter(M_ID) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT FK_Dienstleistung_Vertraege FOREIGN KEY(D_ID)
        REFERENCES Dienstleistung(D_ID),
    CONSTRAINT FK_Compliance_Vertraege FOREIGN KEY(C_ID)
        REFERENCES Compliance(C_ID);
所以问题是,因为这个,我得到了一个错误

Notification 1785, level 16, status 0, line 28
Introducing FOREIGN KEY constraint 'FK_Mitarbeiter_Vertraege' on table 'vertreage' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Notification 1750, level 16, status 1, line 28
Could not create constraint or index. See previous errors.
是否可以设置多个引用完整性条件?如果不可以,如何在SQL中设置多个引用完整性条件?类似于
alterconstraint

编辑

布莱恩要求的。在我的桌上,我有以下限制。奇怪的是,它们起作用了

ALTER TABLE Mitarbeiter
    ADD CONSTRAINT FK_Adresse_Mitarbeiter FOREIGN KEY(AD_ID)
        REFERENCES Adresse(AD_ID) ON UPDATE CASCADE,
    CONSTRAINT FK_Standort_Mitarbeiter FOREIGN KEY(S_ID)
        REFERENCES Standort(S_ID) ON UPDATE CASCADE,
    CONSTRAINT FK_Abteilung_Mitarbeiter FOREIGN KEY(AB_ID)
        REFERENCES Abteilung(AB_ID) ON UPDATE CASCADE;

这是一个猜测,因为问题不包括所有相关表格

您正在尝试从表
Vertraege
到表
Mitarbeiter
创建外键约束。然而,从表
Mitarbeiter
到表
Vertraege
,似乎已经存在另一个[reverse]外键约束(未显示)。我不能确定,因为您没有包括表
Mitarbeiter
的定义

SQLServer认为这是一种“循环关系”。然而,这一切都是“合法的”。没什么问题。好。。。只要其中一些可以为空,或者可以延迟(但SQL Server不实现后者)。循环关系可能不仅涉及两个表,还涉及三个或更多个表。然而,从问题中不清楚涉及多少个表

问题源于要指定的“级联删除/更新”规则。此规则可能导致通过简单的无害的
删除
更新
来删除或更新大量数据,例如:

delete from Vertraege where ID = 123
此语句似乎正在删除一行。但是,级联删除规则最终可能会一次从多个表中删除数千行,而无需进一步确认。这就是你想要的吗


无论如何,SQL Server都不喜欢这些循环级联删除/更新,因为它认为它们[合理]危险,并决定不允许它们。

这是一个猜测,因为问题不包括所有相关的表

您正在尝试从表
Vertraege
到表
Mitarbeiter
创建外键约束。然而,从表
Mitarbeiter
到表
Vertraege
,似乎已经存在另一个[reverse]外键约束(未显示)。我不能确定,因为您没有包括表
Mitarbeiter
的定义

SQLServer认为这是一种“循环关系”。然而,这一切都是“合法的”。没什么问题。好。。。只要其中一些可以为空,或者可以延迟(但SQL Server不实现后者)。循环关系可能不仅涉及两个表,还涉及三个或更多个表。然而,从问题中不清楚涉及多少个表

问题源于要指定的“级联删除/更新”规则。此规则可能导致通过简单的无害的
删除
更新
来删除或更新大量数据,例如:

delete from Vertraege where ID = 123
此语句似乎正在删除一行。但是,级联删除规则最终可能会一次从多个表中删除数千行,而无需进一步确认。这就是你想要的吗


在任何情况下,SQL Server都不喜欢这些循环级联删除/更新,因为它认为它们[合理]危险,并决定不允许它们。

错误消息提到“多个级联路径”,以及您在问题中添加的附加约束,我的第一个怀疑是,以下项目之间存在相互作用(根据您最初的帖子编辑):


因此,有一个约束直接从
Vertraege
Standort
,另一个约束从
Vertraege
Mitarbeiter
Standort
。我的第一个建议是删除
FK_Standort_Vertraege
,看看这是否解决了您的问题。

错误消息中提到了“多个级联路径”,并且由于您在问题中添加了额外的限制,我第一次怀疑以下项目之间存在交互(从您最初的帖子中编辑):


因此,有一个约束直接从
Vertraege
Standort
,另一个约束从
Vertraege
Mitarbeiter
Standort
。我的第一个建议是删除
FK_Standort_Vertraege
,看看这是否解决了您的问题。

看起来错误的原因与您发布的声明不同。错误提到了一个名为“Trust”的表,但您的代码正在更改表“Vertraege”。是否可能?绝对是的。现在,FK员工合同的约束在哪里?这不是问题。我的错,我翻译了它,忘了更改应该保持不变的内容…你对Mitarbeiter有什么FK约束,你有什么样的FK约束,参考
Vertraege
?@Brian我在问题中添加了它。看起来错误是因为与你发布的声明不同的约束。错误提到了一个名为“Trust”的表,但您的代码正在更改表“Vertraege”。是否可能?绝对是的。现在,FK员工合同的约束在哪里?这不在问题中。糟糕的是,我翻译了它,忘了更改应该保持不变的内容…你对Mitarbeiter有什么FK约束,以及你有什么FK约束,参考
Vertraege
?@Brian我在问题中添加了它,但问题是,我需要FK_Standort_Vertraege什么是
FK_Standort_Vertraege
做的而不是
FK_Mitarbe做的
ALTER TABLE Mitarbeiter
    CONSTRAINT FK_Standort_Mitarbeiter FOREIGN KEY(S_ID)
        REFERENCES Standort(S_ID) ON UPDATE CASCADE,