当您创建 FOREIGN KEY 约束 1785年时发生的错误消息可能会导致级联的多个路径

文章翻译 文章翻译
文章编号: 321843 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

当您创建 FOREIGN KEY 约束时,您可能会收到以下错误消息:
服务器: 在表"表 2"上的消息 1785,级别 16 状态 1 行 1 简介 FOREIGN KEY 约束 fk_two 可能导致周期或层叠的多个路径。无操作或 ON UPDATE NO 操作,ON DELETE 指定或修改其他 FOREIGN KEY 约束。 服务器: 消息 1750,级别 16 状态 1 行 1 无法创建约束。请参阅以前的错误。

原因

由于表不能在 SQL Server 中, 出现的所有级联引用操作开始一个 DELETE 或 UPDATE 语句的列表中的多个时间,您会收到此错误消息。例如对于树中的级联引用操作必须只有一个特定的表的一个路径在级联引用操作树上。

替代方法

要变通解决此问题,不要创建级联引用操作的列表中将创建一个表的多个路径的外键。

您可以实施参照完整性,以下几种方式。声明性引用完整性 (DRI) 是在最基本的方法,但它也是最灵活的方法。如果您需要更多的灵活性,但您仍然希望较高的完整性级别您可以使用触发器。

更多信息

下面的代码示例是一个外键创建尝试生成该错误消息的示例:

Use tempdb
go
create table table1 (user_ID integer not null primary key, user_name
char(50) not null)
go

create table table2 (author_ID integer not null primary key, author_name
char(50) not null, lastModifiedBy integer not null, addedby integer not
null)

go

alter table table2 add constraint fk_one foreign key (lastModifiedby)
references table1 (user_ID) on delete cascade on update cascade
go
alter table table2 add constraint fk_two foreign key (addedby)
references table1(user_ID) on delete no action on update cascade
go
--this fails with the error because it provides a second cascading path to table2.

alter table table2 add constraint fk_two foreign key (addedby)
references table1 (user_ID) on delete no action on update no action
go
-- this works.
				

引用

有关详细的信息,请参阅"级联引用完整性约束"主题中 SQL Server 2000 丛书联机。

属性

文章编号: 321843 - 最后修改: 2007年11月2日 - 修订: 3.4
这篇文章中的信息适用于:
  • Microsoft SQL Server 2000 标准版
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL 2005 Server Workgroup
关键字:?
kbmt kbbug kbpending kbprb kbprogramming KB321843 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 321843
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com