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

Откуда:
Сообщений: 434
Сложилась такая ситуация: есть 4 таблицы (T, T1,T2,T3). В T -есть PK, в остальных FK ссылается на него. В свойствах FK указано No Action при delete.
Необходимо удалить 1 запись из T. Проверяю ссылок ни в одной таблицы на удаляемую запись нет.
Пытаюсь удалить. Ругается- не могу удалить, т.к есть ссылка на T1. Убираю FK в T1.
Пытаюсь удалить. Ругается- не могу удалить, т.к есть ссылка на T2. Убираю FK в T2. Тоже самое с T3.
Убираю все FK. Удаляю ОДНУ запись из T.
Пытаюсь восстановить все FK. Ругается- не могу создать, т.к есть несуществующие ключи. Смотрю в T и точно - удалились еще 9 строк!
Восстановливаю все FK. Нормально. Добавляю удаленные из backup. Номально.

Но почему так случилось? Проверял через DBCC без ошибок.
Если бы сам не сделал, не поверил.
4 июн 09, 14:10    [7265241]     Ответить | Цитировать Сообщить модератору
 Re: Foreign Key  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Oleg6619
Смотрю в T и точно - удалились еще 9 строк!
Первое что приходит в голову - это циклическая ссылка таблицы T
на саму себя с каскадным удалением

Ну типа ID и ParentID например
4 июн 09, 14:13    [7265262]     Ответить | Цитировать Сообщить модератору
 Re: Foreign Key  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
триггер?
4 июн 09, 14:15    [7265271]     Ответить | Цитировать Сообщить модератору
 Re: Foreign Key  [new]
Oleg6619
Member

Откуда:
Сообщений: 434
Паганель
Oleg6619
Смотрю в T и точно - удалились еще 9 строк!
Первое что приходит в голову - это циклическая ссылка таблицы T
на саму себя с каскадным удалением

Ну типа ID и ParentID например


No Action при delete. Да ссылки между T1, T2,T3 есть, но везде No Action при delete.
4 июн 09, 14:26    [7265368]     Ответить | Цитировать Сообщить модератору
 Re: Foreign Key  [new]
Oleg6619
Member

Откуда:
Сообщений: 434
PaulYoung
триггер?

Огромное спасибо, "а слона, то я и не приметил".
Тема закрыта.
4 июн 09, 14:29    [7265390]     Ответить | Цитировать Сообщить модератору
 Re: Foreign Key  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Паганель
Oleg6619
Смотрю в T и точно - удалились еще 9 строк!
Первое что приходит в голову - это циклическая ссылка таблицы T
на саму себя с каскадным удалением

Ну типа ID и ParentID например
Неее! Так нельзя!
CREATE TABLE T(ID INT NOT NULL PRIMARY KEY, ParentID INT FOREIGN KEY REFERENCES T(ID) ON DELETE CASCADE);
СЕРВЕР:
Msg 1785, Level 16, State 0, Line 1
Introducing FOREIGN KEY constraint 'FK__T__ParentID__0DAF0CB0' on table 'T' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.
4 июн 09, 14:32    [7265409]     Ответить | Цитировать Сообщить модератору
 Re: Foreign Key  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
да, я уже и сам ради интереса попробовал
действительно нельзя
4 июн 09, 14:34    [7265426]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить