我有一个简单的列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定义的列,或者所添加的列是Identity或timestamp列,或者如果不满足上述任何条件,则该表必须为空允许添加此列。
列“ Weight2”不能添加到非空表“ TableA”中,因为它不满足这些条件。
谢谢
答案 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