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