1. ホーム
  2. sql-server

[解決済み] 制約条件付きでカラムを削除するには?

2022-04-24 01:54:24

質問

SQL Server 2008でDefault制約を持つカラムを削除する方法は?

私のクエリは

alter table tbloffers
drop column checkin

以下のようなエラーが発生します。

<ブロッククオート

1 つ以上のオブジェクトがこの列にアクセスしているため、ALTER TABLE DROP COLUMN のチェックインに失敗しました。

制約付きの列を削除するための私のクエリを修正できる人はいますか?

どのように解決するのですか?

まず、問題のある 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