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

Откуда:
Сообщений: 245
Диспозиция (псевдо-код)

CLEAN_PARENT(@parent_id)
BEGIN

begin tran


 exec CLEAN_CHILDS parent_id

 delete from parents where id = @patent_id             -- (1)

commit tran

END

CLEAN_CHILDS(@parent_id)
BEGIN

 delete from childs where idParent = @patent_id       --  (2)

END


То есть по сути в рамках одной транзации (начинается и заканчивается внутри родителя) надо вычистить сложную структуру.
Часть ее чистится в дочерней хранимке, которая собственные транзакции не использует. @@trun_count внутри и снаружи постоянно остается = 1.
проблема в том, что при заданной диспозиции в строке (1) возникает исключение ссыллочной целостности, так как ссылочные данные в таблице childs видятся неудаленными в строке (2). Если перенести полностью код CLEAN_CHILDS в CLEAN_PARENT и заменить им вызов CLEAN_CHILDS - то есть просто идут DELETE инструкции - то все нормально.
Почему так происходит?
SQL Server 2012, Win8
25 июл 14, 14:56    [16358055]     Ответить | Цитировать Сообщить модератору
 Re: Хранимка. Удаление родительской записи после чистки дочерних во вложенной хранимке.  [new]
invm
Member

Откуда: Москва
Сообщений: 9719
ktv
Почему так происходит?
Потому что у вас что-то не так с CLEAN_CHILDS, либо с ее вызовом. Ибо чудес не бывает.
25 июл 14, 15:38    [16358374]     Ответить | Цитировать Сообщить модератору
 Re: Хранимка. Удаление родительской записи после чистки дочерних во вложенной хранимке.  [new]
ktv
Member

Откуда:
Сообщений: 245
invm,
возможно :) хотя я проверил все несколько раз и прошелся отладчиком по шагам :)
попробую еще раз проверить, если чудо произойдет - вопробуете воспроизвести?
25 июл 14, 15:43    [16358432]     Ответить | Цитировать Сообщить модератору
 Re: Хранимка. Удаление родительской записи после чистки дочерних во вложенной хранимке.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37224
ktv
попробую еще раз проверить, если чудо произойдет - вопробуете воспроизвести?
Вопроизведение - это целиком ваша забота. Давайте тестовые данные, и скрипты падающих процедур.
25 июл 14, 15:49    [16358484]     Ответить | Цитировать Сообщить модератору
 Re: Хранимка. Удаление родительской записи после чистки дочерних во вложенной хранимке.  [new]
ktv
Member

Откуда:
Сообщений: 245
не, чудо все же не произошло :)
N-я попытка прошла нормально :)
Видимо, где-то кривые руки сработали :):)
Камрады, спасибо за внимание :)
25 июл 14, 16:12    [16358648]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить