Как уже упоминал Демс, для этого не рекомендуется использовать транзакцию.
Подход, который я бы использовал для решения этой проблемы, обычно заключается в добавлении Param в мой StoredProc, чтобы узнать, является ли это предварительным просмотром или нет.
Я бы сделал те же операции, однако, если бы это был сохраненный процесс, который вставляет или обновляет новые строки, я бы тянул соответствующие данные в #TeoraryTable и редактировал бы эти данные вместо непосредственного редактирования реальных таблиц.
В конце моей процедуры я просто проверяю, просматриваем ли мы предварительный просмотр или нет, и если нет, я бы вставлял / обновлял новые строки из моей # TemporaryTable.