Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка при создании ограничения на таблицу для поддержания древовидной структуры данных  [new]
SADT
Member

Откуда:
Сообщений: 216
Добрый день. Есть таблица, в которой будут храниться данные древовидного вида. Все, что нужно сделать – создать рубрикатор произвольной глубины. Я убрал ненужные поля, потому что при выполнении
CREATE TABLE Test(
ID int not null,
ParentId int not null,
CONSTRAINT PK_Test PRIMARY KEY(ID)
);

ALTER TABLE Test ADD CONSTRAINT FK_Test_Test FOREIGN KEY(ParentId)
REFERENCES Test (Id) ON DELETE CASCADE ON UPDATE CASCADE;
таблица Test создается, но ограничение – нет:

Сообщение 1785, уровень 16, состояние 0, строка 7
Введение ограничения внешнего ключа (FOREIGN KEY) "FK_Test_Test" для таблицы "Test" может привести к появлению циклов или множественных каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION либо измените другие ограничения внешнего ключа (FOREIGN KEY).
Сообщение 1750, уровень 16, состояние 0, строка 7
Нельзя создать ограничение. См. предыдущие ошибки.

Почему я получил такое исключение? Таблица с идентичной структурой в MS Access создана и работает. Начал переносить в SQL Server 2008 - сообщение об ошибке.
5 дек 09, 16:03    [8024123]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при создании ограничения на таблицу для поддержания древовидной структуры данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
SADT

Почему я получил такое исключение?

Потому что "может привести к появлению циклов или множественных каскадных путей"


SADT

Таблица с идентичной структурой в MS Access создана и работает.

А в SQL Server не работает
"Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION "
5 дек 09, 17:27    [8024249]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при создании ограничения на таблицу для поддержания древовидной структуры данных  [new]
SADT
Member

Откуда:
Сообщений: 216
Glory
SADT

Почему я получил такое исключение?

Потому что "может привести к появлению циклов или множественных каскадных путей"


SADT

Таблица с идентичной структурой в MS Access создана и работает.

А в SQL Server не работает
"Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION "

Glory, Вы цитируете сообщение об ошибке, но как каскадное удаление сделать? Вариант с NO ACTION я, разумеется, попробовал: разумеется никакого каскадного удаления не происходит. Значит единственный вариант сделать каскадное удаление в такой структуре данных - сделать это рекурсивно, например, написав ХП?
6 дек 09, 09:50    [8025013]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при создании ограничения на таблицу для поддержания древовидной структуры данных  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SADT,

1. ON DELETE NO ACTION
2. + TRIGGER INSTEAD OF DELETE
3. + в триггере удаление через рекурсивное CTE детей узлов, перечисленных в deleted
4. + в триггере удаление самих узлов, перечисленных в deleted

Как-то так
6 дек 09, 12:25    [8025117]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при создании ограничения на таблицу для поддержания древовидной структуры данных  [new]
SADT
Member

Откуда:
Сообщений: 216
iap, спасибо.
6 дек 09, 12:44    [8025145]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить