Сообщение об ошибке, 1785 возникает при создании ограничения FOREIGN KEY, может привести к несколько путей каскадом

Переводы статьи Переводы статьи
Код статьи: 321843 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

При создании ограничения FOREIGN KEY, может появиться следующее сообщение об ошибке:
Сервер: Сообщение 1785, уровень 16, состояние 1, строка 1 Введение ограничения FOREIGN KEY «fk_two» в таблице «table2» может вызвать циклов или множественных каскадных путей. Укажите при УДАЛЕНИИ ДЕЙСТВИЙ или ON UPDATE NO ACTION или изменять другие ограничения FOREIGN KEY. Сервер: Сообщение 1750, уровень 16, состояние 1, строка 1 Не удалось создать ограничение. Просмотреть предыдущие ошибки.

Причина

Появляется это сообщение об ошибке, так как в SQL Server таблицы не может появляться более одного раза в списке всех каскадных ссылочных действий, вызванных инструкции UPDATE или DELETE. Например дереве каскадных ссылочных действий только должен иметь один путь к определенной таблице каскадных ссылочных действий дерева.

Временное решение

Чтобы обойти эту проблему, не создать внешний ключ, в списке каскадных ссылочных действий более чем один путь к таблице.

Можно включить ссылочную целостность несколькими способами. Декларативная ссылочная целостность (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 - Последний отзыв: 8 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Ключевые слова: 
kbbug kbpending kbprb kbprogramming kbmt KB321843 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:321843

Отправить отзыв

 

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