Я мигрирую данные из серии старых таблиц данных в новые таблицы.В этом процессе я столкнулся с некоторыми проблемами.
Мне нужно создать таблицу, скопировать некоторые данные из старой таблицы в новую, а затем удалить старую таблицу.Для этого мне нужно написать скрипт, который не показывает ошибок, даже если вы запускаете его в перенастроенной базе данных, то есть, даже если старые таблицы отсутствуют, я не должен видеть ошибки и просто пропустить процесс.
Вот то, что я придумал до сих пор:
IF NOT EXISTS(SELECT * FROM sys.objects WHERE Object_ID = Object_ID('Old_Table'))
GOTO Migrated_Before
-- Drop OldTable Indexes, PK's and FK's;
-- CREATE newTable ....;
-- Add Indexes, PK's, Fk's;
-- INSERT INTO NewTable(someFields) FROM OldTable.Fields, OtherTable.Fields ...;
-- DROP OldTable;
Migrated_Before:
Вот проблема, Drop и Create нужно GO для фиксации изменений, прежде чем перейти к следующему этапу, в противном случае следующая команда не будет выполненаОднако размещение GO между GOTO и Label сделает метку неопределенной для GOTO.
Как я могу принудительно запустить каждый процесс, прежде чем переходить к следующему без многократной записи IF?
Решение: здесь я оставляю решение в качестве ссылки для других.Я добавил начальную транзакцию перед каждым оператором, который должен произойти, прежде чем перейти к следующему оператору, например, создать таблицу или удалить FK.а также заменил goto и label на начало конца (мое первое решение)