【问题标题】:How to add a new column in the table if the table has a constraint on it如果表有约束,如何在表中添加新列
【发布时间】:2021-12-02 02:26:09
【问题描述】:

我需要添加一个包含这些详细信息的新列。

ADD [Revenue] decimal(10,6) NOT NULL

目前我的SQL脚本是这样的。

CREATE TABLE [dbo].[FlightTotal]
(
    [FlightID] [int] NOT NULL,
    [CreatedUserID] [bigint] NOT NULL,
    [CreatedUTC] [datetime2](3) NOT NULL,
    [ManualT] [smallint] NULL

    CONSTRAINT [FlightTotal_PK] 
        PRIMARY KEY CLUSTERED ([FlightID] ASC)
                WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                      IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                      ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [UD01]
) ON [UD01]
GO

ALTER TABLE [dbo].[FlightTotal] 
    ADD CONSTRAINT [DF_FlightTotal_CreatedUTC]  
        DEFAULT (sysutcdatetime()) FOR [CreatedUTC]
GO

您知道如何更改当前表以便我可以插入新列吗?

【问题讨论】:

  • 只要使用alter table yourtable add column ....
  • 如果你的表中已经有行,你不能在不指定DEFAULT值的情况下添加NOT NULL
  • @Squirrel 是的,我的表中有行,怎么办??
  • 如中所述,您需要指定 DEFAULT 值示例:ALTER TABLE [FlightTotal] ADD [Revenue] decimal(10,6) NOT NULL DEFAULT 0。或添加为可空列,更新表并相应地设置值,然后将其更改为 NOT NULL
  • @Squirrel:你应该把它放在答案中。

标签: sql-server tsql


【解决方案1】:
ALTER TABLE [dbo].[FlightTotal] 
ADD [Revenue] decimal(10,6) NOT NULL
CONSTRAINT [DF_Revenue] DEFAULT 0

ALTER TABLE [dbo].[FlightTotal] 
DROP CONSTRAINT [DF_Revenue]

【讨论】:

  • 谢谢。有用。由于表中有行时无法添加新列,因此最好使用默认约束然后删除它。
  • 值得一提的是,您应该等待删除约束,直到您可以确认写入表的任何人都在为新列提供值。否则,他们会收到错误消息。
【解决方案2】:

向表中添加列

ALTER TABLE [FlightTotal] ADD [Revenue] decimal(10,6) NOT NULL

如果表已经有一些行,则不能添加NOT NULL 列。您需要指定一个DEFAULT

示例:

ALTER TABLE [FlightTotal] ADD [Revenue] decimal(10,6) NOT NULL DEFAULT 0

添加为可空列,

ALTER TABLE [FlightTotal] ADD [Revenue] decimal(10,6)

更新表格并相应地设置值

UPDATE [FlightTotal]
SET    [Revenue]   = {some value}
{WHERE  condition if any}

然后将其更改为 NOT NULL

ALTER TABLE [FlightTotal] ALTER COLUMN [Revenue] decimal(10,6) NOT NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2015-02-17
    • 2022-01-01
    相关资源
    最近更新 更多