Help us understand the problem. What is going on with this article?

カラム名を指定して、そのカラムのデフォルト制約をドロップする

More than 3 years have passed since last update.

カラム定義を変更したり、カラムをドロップしたりする際に、出現する忌まわしきエラー

The object 'DF__hogehoge' is dependent on column 'PIYO'.

変更するカラムが一つならまだしも、複数になった場合、いちいち制約をドロップするのが面倒な場合に
変更したいカラムのデフォルト制約を一括取得し、ドロップする方法です。

 DECLARE @listOfDFs TABLE (DF nvarchar(50))

INSERT @listOfDFs(DF)
    SELECT df_con.name
    FROM sys.default_constraints df_con
    INNER JOIN sys.columns sys_col
    ON df_con.parent_object_id = sys_col.object_id
    INNER JOIN sys.tables sys_tbl
    ON df_con.parent_object_id = sys_tbl.object_id
    WHERE  
        sys_tbl.name = 'your_table_name'
        AND sys_col.column_id = df_con.parent_column_id
        AND sys_col.name in (
            'hoge', 'fuga', 'piyo'
        )

DECLARE @DF nvarchar(50)
DECLARE @sql nvarchar(200)
DECLARE @i int
SET @i = 0

DECLARE DFcursor CURSOR
    for select * from @listOfDFs

OPEN DFcursor

WHILE (@i < 3)
BEGIN
    FETCH NEXT FROM DFcursor into @DF
    SELECT @DF
    SET @sql = N'ALTER TABLE your_table_name DROP CONSTRAINT ' + @DF
    EXEC sp_executesql @sql
    SET @i = @i+1
END

CLOSE DFcorsor 
iijijii
UX designer / ex-engineer 元々エンジニアとしてC#をメインにフロント〜バック〜インフラまで色々やってました。その後、海外のUXデザインブートキャンプを経てUXデザイナーをしています。それでもたまにコード書きたくなったり、黒い画面触りたくなったりします
https://ririsato.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away