Лучший способ добавить новый необнуляемый столбец?
Я веб-разработчик, обладающий правами администратора на нашем 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 для значения по умолчанию.
Поэтому мой ответ - доверять своему инстинкту.