Мы работаем над приложением, в котором иногда нам нужно удалить (некоторые) записи из таблицы SQL и заменить их новым списком строк. В нашем приложении логика такова:
Delete relevant_entries using delete_stored_procedure
For Each new_entry in new_entries
Insert new_entry using insert_stored_procedure
Эта логика работает, но есть загвоздка. Что делать, если DELETE работает, но одна из INSERTS не работает? Нам нужно иметь возможность вернуть базу данных к состоянию до того, как строки таблицы были удалены и были вставлены любые предыдущие записи. Есть ли способ сделать это и ТОЛЬКО вернуть эти вещи, не затрагивая любые другие несвязанные операции, которые могли произойти одновременно? (т.е. строка создается в другой таблице - мы не хотим возвращать это).
Я понимаю, что вы можете заключить в транзакцию несколько операторов SQL, но в этом случае логика выполняется через несколько вызовов хранимых процедур. Любой совет?


Создайте еще одну хранимую процедуру, которая:
Спасибо, это был мой первоначальный план, но я не был уверен, смогу ли передать массив элементов в хранимую процедуру (требуется для части вставки). С тех пор я обнаружил, что вы можете объявить параметр с табличным значением и передать его в хранимую процедуру в SQL Server. Принимаю этот ответ.