gpt4 book ai didi

sql - 为什么 SQL Server 不断创建 DF 约束?

转载 作者:行者123 更新时间:2023-12-01 18:34:29 25 4
gpt4 key购买 nike

我正在尝试使用 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 停止创建这个随机命名的约束,要么需要能够使用通配符在脚本中删除该约束,因为名称发生了变化。

最佳答案

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

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

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

关于sql - 为什么 SQL Server 不断创建 DF 约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com