2014-12-09 4 views
0

У меня есть 8 таблиц. Один родитель и 7 детей. Внутри цикла while и удалите из таблицы один за другим. Если какая-либо ошибка во время цикла сводится к откату транзакции. Возможно ли это внутри цикла while.обработка ошибок внутри цикла while

Пример:

объявляет @count INT, INT @intFlag

начинает попробовать множества @count = (SELECT COUNT (ID), где из MyTable [дата] между GETDATE() - 1 и (GETDATE)) , если @count> 0

начинают множество @intFlag = 1

начать транзакцию

while (@intFlag <= @Count) 
begin 

    update MyTable1 
     set column1 = 1 
    where [Date] between getdate()-1 and getdate(); 

    update MyTable2 
     set column2 = 1 
    where [Date] between getdate()-1 and getdate(); 

set @intFlag = @intFlag + 1 
end; 

совершает

конца

конца попробовать

начать добычу если @@ TRANCOUNT> 0 Откат конца поймать

Если какая-либо ошибка в процессах ее откатить все дочерние таблицы сделка

+0

Запустите транзакцию перед циклом. Если вы можете использовать try-catch для обнаружения ошибки, включите цикл внутри блока try-catch с транзакцией commit в конце блока try и отката внутри блока catch – Sach

ответ

0

попытаться поймать блок над петлей, как показано ниже

BEGIN TRANSACTION 

BEGIN TRY 

/* 
* YOUR LOOP 
*/ 

COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 

ROLLBACK TRANSACTION 

END CATCH 
Смежные вопросы