我有一个简单的列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',因为它不满足这些条件。
谢谢
该错误清楚地告诉您:如果您将一个包含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
您可以添加列并使其成为从Weight1获取值的计算列:
ALTER TABLE [TableA] ADD [Weight2] AS ([Weight1]) PERSISTED
希望能帮助到你。