Проект базы данных Visual Studio 2010 SQL Server 2008 - пользовательские обновления - PullRequest
0 голосов
/ 02 ноября 2010

В Visual Studio, скажем, у вас есть проект базы данных SQL 2008 и вы добавляете необнуляемый столбец в таблицу. Когда вы сейчас развернете базу данных, если в этой таблице есть данные, она потерпит неудачу. (Верно?) Как бы вы написали собственную логику, чтобы во время обновления вы могли установить для этого столбца значение «x» или использовать более сложный запрос или курсор для обновления всей таблицы и заполнения нового столбца? Это то, что вы хотели бы случиться только один раз - в то же время столбец был добавлен в базу данных. Есть ли какая-либо поддержка для этого?

Ответы [ 5 ]

1 голос
/ 06 июня 2012

Вот как я это делаю.

В средстве просмотра схемы откройте сценарий создания таблицы и добавьте новые столбцы следующим образом:

[first_name]        varchar( 32 )   NOT NULL default ' ',
[last_name]         varchar( 32 )   NOT NULL default ' ',

Поскольку они имеют * значение по умолчанию *, они могут успешно развернуться.

Затем в своем скрипте после установки я проверяю значения '' в таблице и запускаю обновление, чтобы заполнить их, если это так. С другой стороны, код может это исправить.

1 голос
/ 03 ноября 2010

Я бы добавил обнуляемый столбец, запустил команду UPDATE, чтобы заполнить его, и изменил бы столбец на NOT NULL. Хотя я использую Visual Studio 2010, я не использую его для развертывания. Вместо этого я развертываю с SQL Compare - он генерирует SQL-скрипт, который легко настроить.

0 голосов
/ 03 ноября 2010

Вот что я в итоге сделал.

  1. Добавление информации о версии в базу данных (например, в таблице SystemSettings).
  2. Создание сценария для следующей версии (например, 1.1.0.0.sql).
  3. В файле Scripts \ Post-Deployment \ Script.PostDeployment.sql добавьте следующее:

DECLARE @versionMajor INT;ОБЪЯВИТЬ @versionMinor INT;ОБЪЯВИТЬ @versionBuild INT;ОБЪЯВИТЬ @versionRevision INT;ВЫБЕРИТЕ ТОП 1@versionMajor = VersionMajor,@versionMinor = VersionMinor,@versionBuild = VersionBuild,@versionRevision = VersionRevisionИЗ системных настроек;IF (@versionMajor <= 1 И @versionMinor <1)НАЧАТЬ: r ".. \ Upgrade \ 1.1.0.0.sql"КОНЕЦ</p>

Это запустит скрипт 1.1.0.0, если версия базы данных ниже.Сценарий 1.1.0.0 обновляет номера версий базы данных как последний шаг.В будущих обновлениях просто потребуется добавить еще один блок IF.

0 голосов
/ 03 ноября 2010

Я провел много исследований по этому типу темы , и, к сожалению, кажется, что это область, в которой не хватает проектов VSDB.Хорошее место для начала - руководство Visual Studio ALM Rangers по проектам VSDB;у них есть практические занятия с подробным описанием рекомендуемых рекомендаций для выполнения именно того, о чем вы спрашиваете (это включает использование сценариев до и после развертывания для копирования данных в временные таблицы и из них).Кроме того, в блоге Барклай Хилла есть статья , относящаяся к вашему вопросу (он является старшим руководителем программы для Data Tools), которая совпадает с руководством.

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

0 голосов
/ 03 ноября 2010
update mytable
set newcolumn = 'x'
where newcolumn is null;
...