SQL Server 2017使用同一表中另一列的默认值添加新列

问题描述 投票:0回答:2

我有一个简单的列Weight1,其类型为floatnot null。我想添加一个新的Weight2列,其中包含来自Weight1的默认值,因此Weight1Weight2都是相同的。

任何人都可以帮忙怎么做?

我尝试了以下方法:

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',因为它不满足这些条件。

谢谢

sql-server-2017
2个回答
0
投票

该错误清楚地告诉您:如果您将一个包含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
投票

您可以添加列并使其成为从Weight1获取值的计算列:

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

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.