SQL Server 2017从同一表的另一列添加具有默认值的新列

时间:2019-04-10 09:57:27

标签: sql-server-2017

我有一个简单的列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定义的列,或者所添加的列是Identity或timestamp列,或者如果不满足上述任何条件,则该表必须为空允许添加此列。

     

列“ Weight2”不能添加到非空表“ TableA”中,因为它不满足这些条件。

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

希望有帮助。

答案 1 :(得分: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