если вы хотите иметь возможность повторного запуска в ваших сценариях, то вы не можете использовать их как определения ... я имею в виду, что вам нужно сосредоточиться на сценариях изменений, а не на моем сценарии таблицы. 1001 *
допустим, у вас есть таблица. Клиенты:
create table Customers (
id int identity(1,1) primary key,
first_name varchar(255) not null,
last_name varchar(255) not null
)
и позже вы хотите добавить столбец статуса. Не изменяйте исходный табличный скрипт, который уже запущен (и может иметь синтаксис if (! Существующие), чтобы он не вызывал ошибок при повторном запуске).
Вместо этого есть новый скрипт с именем add_customer_status.sql
в этом скрипте у вас будет что-то вроде:
alter table Customers
add column status varchar(50) null
update Customers set status = 'Silver' where status is null
alter table Customers
alter column status varchar(50) not null
Опять же, вы можете заключить это в блок if (! Существующие), чтобы разрешить повторный запуск, но здесь мы использовали идею, что это скрипт изменения, и мы соответствующим образом адаптируем базу данных. Если в таблице клиентов уже есть данные, то все в порядке, поскольку мы добавляем столбец, заполняем его данными, а затем добавляем ограничение not null.
Обе упомянутые выше среды миграции хороши, у меня также был отличный опыт работы с MigratorDotNet .