Лучший способ добавить новый необнуляемый столбец?

Я веб-разработчик, обладающий правами администратора на нашем SQLServer, и мне нужно добавить столбец целых чисел (NULL) в существующую таблицу. Я ищу лучший способ создать этот столбец и заполнить его данными.

Пример нового столбца:

branchId (int) non-nullable with a foreign key to the parent table

Пример существующей родительской таблицы Branch:

id (int) auto-incrementing primary key
branchName (varchar)

Я знаю, что мог бы просто установить значение по умолчанию, чтобы оно указывало на идентификатор соответствующей записи ветвления, но я не решаюсь сделать это, потому что идентификатор ветвления может варьироваться в зависимости от среды.

Моя идея состоит в том, чтобы сначала создать новый столбец branchId как обнуляемый, а затем обновить все записи с правильным идентификатором, получив правильный идентификатор BranchId из запроса, подобного SELECT id FROM Branch WHERE branchName="Branch 4". Затем я бы вернулся и изменил столбец на необнуляемый, что должно быть хорошо, так как все они имеют данные сейчас.

Все мои сценарии изменения базы данных хранятся в системе контроля версий, поэтому это главная причина, по которой нужно элегантное решение, которое может быть запущено в любое время в будущем, независимо от того, какой ID филиала.

Какой лучший способ сделать это?

1 ответ

Решение

По-твоему, как бы я это сделал - столбец, обнуляемый, значения обновлений, не обнуляемые.

Средний шаг (в SQL Server) может быть достигнут следующим образом:

UPDATE
   e
SET
   e.BranchId = s.BranchId
FROM
   ExistingTable e
   INNER JOIN SourceTable s
      ON e.Column = s.Column

Поскольку я не знаю, как выглядит ваш ERD, я предполагаю, что ваши столбцы JOIN не обязательно представляют собой название филиала, которое вы описали в вопросе.

Это может быть не элегантно, но избегает добавления шага для получения значения ID из таблицы Branch для значения по умолчанию.

Поэтому мой ответ - доверять своему инстинкту.

Другие вопросы по тегам