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

Откуда:
Сообщений: 85
Здравствуйте!
Помогите разобраться, ума не приложу как такое может быть
есть две таблицы: T1 , у которой есть столбец R1849_1, ссылающийся на столбец R1849_1 в тбл T2
FOREIGN KEY	FK__T1__R1849_1__0B702B9A	No Action	No Action	Enabled	Is_For_Replication	R1849_1
 	 	 	 	 	 	REFERENCES DB1.dbo.T2 (R1849_1)
PRIMARY KEY (clustered)	PK__T1__0A7C0761	(n/a)	(n/a)	(n/a)	(n/a)	R1850

и тбл T2 , имеющая в том числе столбец R1849_1

в тексте ХП :
..
delete T2 from T2 join #AA on T2.R1849_1 = #AA.R1849_1 where T2.R1849_1 <> @R1
delete T1 from T1 join #AA on T1.R1849_1 = #AA.R1849_1 where T1.R1849_1 <> @R1
...

на нашей базе работает все нормально,однако некоторые (далеко не все) пользователи (работаем удаленно)
шлют ошибку
"конфликт инструкции DELETE с ограничением REFERENCE FK__T1__R1849_1__0B702B9A
Конфликт произошел в базе данных "DB1", таблица "t1", column "R1849_1"

теряюсь в догадках как такое может проиозойти , подскажите
Заранее спасибо всем ответившим!
9 фев 12, 16:20    [12063887]     Ответить | Цитировать Сообщить модератору
 Re: конфликт инструкции DELETE с ограничением REFERENCE  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
GeneralMotors
теряюсь в догадках как такое может проиозойти , подскажите
Как же иначе, если "T1 , у которой есть столбец R1849_1, ссылающийся на столбец R1849_1 в тбл T2"

То есть ПК в T2, на него ссылается поле R1849_1 из T1

Значит, нужно сначала удалить ссылку (из T1), а потом уже ту запись, на которую эта ссылка ссылалась (из T2), а не наоборот.

GeneralMotors
на нашей базе работает все нормально
Либо у вас нету FK, либо он отключён, либо другое значение имеют имена таблиц.
9 фев 12, 16:29    [12063978]     Ответить | Цитировать Сообщить модератору
 Re: конфликт инструкции DELETE с ограничением REFERENCE  [new]
Glory
Member

Откуда:
Сообщений: 104751
GeneralMotors
в тексте ХП :
..
delete T2 from T2 join #AA on T2.R1849_1 = #AA.R1849_1 where T2.R1849_1 <> @R1
delete T1 from T1 join #AA on T1.R1849_1 = #AA.R1849_1 where T1.R1849_1 <> @R1
...

на нашей базе работает все нормально,однако некоторые (далеко не все) пользователи (работаем удаленно)
шлют ошибку

Разве этот код гарантирует, что из T2 будут удалены все записи, на которые ссылаются удаляемые записи из Т1 ?
9 фев 12, 16:34    [12064041]     Ответить | Цитировать Сообщить модератору
 Re: конфликт инструкции DELETE с ограничением REFERENCE  [new]
GeneralMotors
Member

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


а,да, не было сказано что #AA - некое малое подмножество T2
в данном случае это гарантирует
9 фев 12, 16:41    [12064133]     Ответить | Цитировать Сообщить модератору
 Re: конфликт инструкции DELETE с ограничением REFERENCE  [new]
Glory
Member

Откуда:
Сообщений: 104751
GeneralMotors
а,да, не было сказано что #AA - некое малое подмножество T2
в данном случае это гарантирует

Интересно, каким образом ?
Вы удалили какие-то записи из T2. Где гарантия того, что удалились _все_ дочерние записи для следующей команды delete ?
9 фев 12, 16:43    [12064172]     Ответить | Цитировать Сообщить модератору
 Re: конфликт инструкции DELETE с ограничением REFERENCE  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Glory
GeneralMotors
а,да, не было сказано что #AA - некое малое подмножество T2
в данном случае это гарантирует

Интересно, каким образом ?
Вы удалили какие-то записи из T2. Где гарантия того, что удалились _все_ дочерние записи для следующей команды delete ?


я бы даже добавил, где гарантия что между этими командами в базу не навставляют еще записей в T2 связанных с T1?
9 фев 12, 17:04    [12064457]     Ответить | Цитировать Сообщить модератору
 Re: конфликт инструкции DELETE с ограничением REFERENCE  [new]
GeneralMotors
Member

Откуда:
Сообщений: 85
alexeyvg,

блин, точно, путаница с порядком удаления

спасибо!
9 фев 12, 17:05    [12064467]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить