SQL Server 2017 добавить новый столбец со значением по умолчанию из другого столбца в той же таблице - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть простой столбец 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 позволяет добавлять только столбцы, которые могут содержать нули или иметь определение DEFAULT,или добавляемый столбец является столбцом идентификатора или метки времени, либо, если ни одно из предыдущих условий не удовлетворено, таблица должна быть пустой, чтобы можно было добавить этот столбец.

Невозможно добавить столбец Weight2 в непустую таблицу TableA, поскольку она не удовлетворяет этим условиям.

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Ошибка ясно говорит вам: если вы добавляете столбец с 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
0 голосов
/ 10 апреля 2019

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

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

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

...