已有约束的SQL数据表如何添加指定类型的非空新列?
解决方案
针对SQL Server环境下给[dbo].[FlightTotal]表添加非空Revenue列的需求,分两种场景处理:
场景1:表内当前无任何数据
直接执行加列语句即可:
ALTER TABLE [dbo].[FlightTotal] ADD [Revenue] decimal(10,6) NOT NULL GO
场景2:表内已有存量数据
NOT NULL约束要求所有行的对应字段必须有值,直接执行加列语句会报错,可选择以下两种方式实现:
方式1:加列时同步指定默认约束
如果所有历史数据的Revenue可以统一设置为固定值(比如0),直接执行以下语句即可:ALTER TABLE [dbo].[FlightTotal] ADD [Revenue] decimal(10,6) NOT NULL CONSTRAINT [DF_FlightTotal_Revenue] DEFAULT (0) GO如果后续不需要这个默认约束,加列完成后可手动删除:
ALTER TABLE [dbo].[FlightTotal] DROP CONSTRAINT [DF_FlightTotal_Revenue] GO方式2:先加允许空列,补全数据后修改为非空
如果历史数据的Revenue需要按业务规则分别赋值,按步骤操作:- 先添加允许为空的
Revenue列
ALTER TABLE [dbo].[FlightTotal] ADD [Revenue] decimal(10,6) NULL GO- 按照业务逻辑更新所有存量行的
Revenue字段为有效值
-- 请根据实际业务修改更新条件和赋值逻辑 UPDATE [dbo].[FlightTotal] SET [Revenue] = 业务计算值 WHERE 匹配条件 GO- 确认所有行的
Revenue都不为空后,修改字段为非空约束
ALTER TABLE [dbo].[FlightTotal] ALTER COLUMN [Revenue] decimal(10,6) NOT NULL GO- 先添加允许为空的
注意:执行修改表结构的操作前,建议先备份全表数据,避免误操作导致数据丢失。
内容的提问来源于stack exchange,提问作者Amelia
相关产品推荐
相关产品推荐

