小编典典

为什么SQL Server会继续创建DF约束?

sql

我正在尝试在SQL中创建升级和退出脚本。升级脚本添加一列,如下所示:

IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'ColumnName' 
    AND object_id = OBJECT_ID(N'[dbo].[TableName]'))

ALTER TABLE TableName
    ADD ColumnName bit NOT NULL DEFAULT(0)

退出脚本将删除列,如下所示:

IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ColumnName' 
    AND object_id = OBJECT_ID(N'[dbo].[TableName]'))

ALTER TABLE TableName
    DROP COLUMN ColumnName

但是,回退脚本将引发以下错误:

Msg 5074, Level 16, State 1, Line 5
    The object 'DF__TableName__ColumnName__1BF3D5BD' is dependent on column 'ColumnName'.
Msg 4922, Level 16, State 9, Line 5
    ALTER TABLE DROP COLUMN ColumnName failed because one or more objects access this column.

我知道如何删除约束,但是约束的名称每次都会更改(后缀会更改)。我要么需要SQL
Server停止创建此随机命名的约束,要么由于名称更改,因此我需要能够使用通配符删除脚本中的约束。


阅读 353

收藏
2021-04-15

共1个答案

小编典典

这是default由于DEFAULT(0)新添加的列中添加的约束。

您可以自己命名,这样它就具有已知的固定名称,而不是依赖于自动名称生成。

ALTER TABLE TableName
    ADD ColumnName bit NOT NULL CONSTRAINT DF_Some_Fixed_Name DEFAULT(0)

然后一起删除列和约束

ALTER TABLE dbo.TableName
DROP CONSTRAINT DF_Some_Fixed_Name, COLUMN ColumnName
2021-04-15