【发布时间】:2019-10-21 05:04:26
【问题描述】:
我在这里查看了几篇关于 SQL Server 错误 1785 的堆栈溢出的帖子:引入 FOREIGN KEY 约束可能会导致循环或多个级联路径。而且我发现不检查周期是 Microsoft 产品的一项功能,常见的建议是使用触发器绕过它。
所以我的问题是:
如何在 SQL Server 中的多个表上生成外键依赖关系?
错误地,我发现如果我创建一个单独的独立 PRIMARY KEY,我可以创建具有多个级联路径的表而不会出现错误(并且它在功能上按预期工作)。作为参考,我正在运行 SQL Server 2019。
以下会产生错误:
CREATE TABLE t1 (
id bigint,
CONSTRAINT PK_t1 PRIMARY KEY CLUSTERED (id)
);
CREATE TABLE t2 (
id bigint,
CONSTRAINT PK_t2 PRIMARY KEY CLUSTERED (id)
);
CREATE TABLE cross_t1_t2 (
t1_id bigint,
t2_id bigint,
CONSTRAINT PK_cross_t1_t2 PRIMARY KEY CLUSTERED (t1_id,t2_id),
CONSTRAINT FK_cross_t1_t2_t1 FOREIGN KEY (t1_id)
REFERENCES customers (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT FK_cross_t1_t2_t2 FOREIGN KEY (t2_id)
REFERENCES addresses (id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
因为我在任何地方都找不到这个答案,所以我在这里发布它作为触发器解决方法的替代方案。很高兴知道为什么会这样。
【问题讨论】:
标签: sql sql-server sql-server-2019