Вы ударите себя ...
В цикле у вас есть
FETCH NEXT FROM db_cursor_rollbackdates
Это, по сути, просто оператор выбора и оставляет @dySQL без изменений, поэтому ваша строка EXEC (@dySQL) делает одно и то же обновление снова и снова, поэтому вы не видите дней, обновленных в базе данных.Вам нужно изменить это на:
FETCH NEXT FROM db_cursor_rollbackdates INTO @dySQL
Это невозможно сделать в решении на основе множеств, так как вы обновляете несколько столбцов в нескольких таблицах.С точки зрения альтернативных решений найдите «Cursors vs Temp tables» и решите, как повлиять на производительность.Лично я предпочитаю подход с временными таблицами, но некоторые, возможно, будут линчевать, если я предположу, что это «правильный» путь!Кроме того, если у вас много таблиц с несколькими столбцами datetime и большими объемами данных, вы можете немного повысить производительность, используя временные таблицы и используя вложенные циклы, т. Е. Цикл по всем таблицам с хотя бы одним столбцом datetime, а затем внутри каждого цикла цикла.через все столбцы даты и времени, создавая sql динамически для каждой таблицы, так что для каждой таблицы выполняется только одно обновление, независимо от того, сколько у них столбцов даты и времени.Поскольку это сервер разработки, и на рабочем сервере такой же процедуры не потребуется, я бы не стал беспокоиться о его производительности на вашем месте, если он работает и концентрируется на других областях разработки!
Наконец, имейте в виду другие форматы даты (Smalldatetime, Date, Datetime2), ваш курсор в настоящее время не будет их поднимать.