小编典典

如何删除有约束的列?

all

如何删除在 SQL Server 2008 中具有默认约束的列?

我的查询是

alter table tbloffers
drop column checkin

我得到以下错误

ALTER TABLE DROP COLUMN 签入失败,因为一个或多个对象访问此列。

任何人都可以更正我的查询以删除有约束的列吗?


阅读 66

收藏
2022-08-24

共1个答案

小编典典

首先你应该删除有问题的DEFAULT constraint,然后你可以删除列

alter table tbloffers drop constraint [ConstraintName]
go

alter table tbloffers drop column checkin

但该错误可能由其他原因出现 - 例如用户定义的函数或SCHEMABINDING为其设置了选项的视图。

UPD: 完全自动删除约束脚本:

DECLARE @sql NVARCHAR(MAX)
WHILE 1=1
BEGIN
    SELECT TOP 1 @sql = N'alter table tbloffers drop constraint ['+dc.NAME+N']'
    from sys.default_constraints dc
    JOIN sys.columns c
        ON c.default_object_id = dc.object_id
    WHERE 
        dc.parent_object_id = OBJECT_ID('tbloffers')
    AND c.name = N'checkin'
    IF @@ROWCOUNT = 0 BREAK
    EXEC (@sql)
END
2022-08-24