φ(..) ビボ~6 φ(..)

主にAccess、VBAに関する備忘録

制約付きカラムを削除する

SQL Serverで自動生成される制約名は、
DF__{テーブル名}__{カラム名}__{自動生成文字列}
のようになっていて、DROP/CREATEのたびに変わってしまう。

DECLARE @TABLE_NAME NVARCHAR(256)
DECLARE @COLUMN_NAME NVARCHAR(256)
DECLARE @TABLE_ID INTEGER 
DECLARE @COLUMN_ID INTEGER 
DECLARE @CONSTRAINT_NAME NVARCHAR(256)
SET @TABLE_NAME = '削除したいテーブル'
SET @COLUMN_NAME = '削除したいカラム'

/* 削除したいテーブルのシステムidを取得する */
SELECT @TABLE_ID = id FROM sys.sysobjects 
WHERE xtype = 'U' AND name = @TABLE_NAME

/* 削除したいカラムのシステムidを取得する */
SELECT @COLUMN_ID = column_id FROM sys.columns 
WHERE object_id = @TABLE_ID AND name = @COLUMN_NAME

/* 削除したい制約名を取得する */
SELECT @CONSTRAINT_NAME = name FROM sys.sysobjects 
WHERE id = 
 (SELECT constid FROM sys.sysconstraints 
  WHERE id = @TABLE_ID AND colid = @COLUMN_ID)

/* 制約を削除する */
EXEC('ALTER TABLE '+ @TABLE_NAME + ' DROP CONSTRAINT ' + @CONSTRAINT_NAME)

/* カラムを削除する */
ALTER TABLE 削除したいテーブル DROP COLUMN 削除したいカラム
SQL SERVERでDEFAULT等、制約付きのカラムを削除する - メモス\(^o^)/