SQL Server 2017 добавляет новый столбец со значением по умолчанию из другого столбца в той же таблице

У меня есть простой столбец Weight1 типа float и not null. Я хочу добавить новый столбец Weight2 со значением по умолчанию из Weight1, чтобы и Weight1, и Weight2 были одинаковыми.

Кто-нибудь может помочь, как это сделать?

Я пробовал следующее:

IF EXISTS
(
    SELECT 1
    FROM sys.tables
    WHERE Object_ID = OBJECT_ID(N'[dbo].[TableA]')
) AND NOT EXISTS
(
    SELECT 1
    FROM sys.columns
    WHERE Name = N'Weight2' AND
          Object_ID = OBJECT_ID(N'[dbo].[TableA]')
)
BEGIN
    PRINT 'Adding Weight2 to [dbo].[TableA]';   

    ALTER TABLE [dbo].[TableA] 
        ADD [Weight2] FLOAT NOT NULL 
END

Ошибка, которую я получаю:

ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column.

Column 'Weight2' cannot be added to non-empty table 'TableA' because it does not satisfy these conditions.

Спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
457
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

ALTER TABLE [TableA] ADD [Weight2] AS ([Weight1])  PERSISTED

Надеюсь, поможет.

Ответ принят как подходящий

Ошибка ясно говорит вам: если вы добавляете столбец с NOT NULL в таблицу, в которой уже есть данные, вы ДОЛЖЕН включаете предложение DEFAULT для определения значений по умолчанию для вновь добавленного столбца - вы этого не делаете....

Итак, попробуйте следующее:

ALTER TABLE [dbo].[TableA] 
    ADD [Weight2] FLOAT NOT NULL
    CONSTRAINT DF_TableA_Weight2 DEFAULT(0);

а затем вы можете обновить Weight2, чтобы получить те же значения, что и в Weight1:

UPDATE dbo.TableA
SET Weight2 = Weight1

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