добавить ненулевой столбец, взять значения из другого столбца - PullRequest
0 голосов
/ 25 марта 2020

У меня есть существующая таблица, скажем, Items с Id | CreateDate (как DateTime) столбцами; хотите добавить Year int not null, взять год по умолчанию из столбца CreateDate.

Значение Year будет в дальнейшем изменено на другое значение, но просто установите его в качестве значения по умолчанию при добавлении столбца Year, поскольку хотите добавить столбец, не имеющий значения null, в Year.

Это возможно?

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Если вы хотите добавить новый столбец и инициализировать его значениями из другого, вы можете сделать:

-- add the column (as nullable)
alter table mytable add created_year int;

-- update the values on existing rows
update items set created_year = year(created_date);

-- make the column not nullable
alter table mytable alter column created_year int not null;
1 голос
/ 25 марта 2020

Не беспокойтесь о другом столбце - если только вы не почувствуете необходимость изменить значение столбца в будущем. Вместо этого просто используйте вычисляемый столбец:

alter table t add created_year as (year(created_date));

Это автоматически вычисляется, когда вы запрашиваете таблицу, поэтому она всегда точна как для новых, так и для старых строк.

Предположительно, created_date никогда не обновляется.

...