検索
カレンダー
2018年12月
« 4月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
ブログメニュー
Amazon検索
キーワード:

SQL Server でカラムのデフォルト値を削除する方法

2012年12月18日

DB関連の記事を投稿しまくっているので、調子に乗って SQL Server についても書いてみます。

SQL Server では、カラムのデフォルト値は制約になっているみたいで、
普通に ALTER TABLE table_name ALTER COLUMN column_name INT みたいにしても
デフォルト制約は削除できませんでした。

これを削除するには(すんごい面倒ですが)以下の様にする必要があります。

DECLARE @CONST_NAME VARCHAR(MAX);
SELECT @CONST_NAME=NAME FROM SYS.SYSOBJECTS WHERE ID IN (
	SELECT CONSTID FROM SYS.SYSCONSTRAINTS WHERE COLID IN (
		SELECT COLUMN_ID FROM SYS.COLUMNS WHERE OBJECT_ID IN (
			SELECT ID FROM SYS.SYSOBJECTS WHERE XTYPE='U' AND NAME='table_name'
		) AND NAME='column_name'
	)
);
EXEC('ALTER TABLE simple_table DROP CONSTRAINT'+@CONST_NAME);

プログラム上から実行しないのであれば、最後の一行はEXECでなく直接ALTER文を使ってかまいません。

ちなみに、2行目の SELECT 文は次のように副問い合わせではなく内部結合でも書けます(合ってます?)。

SELECT @CONST_NAME=SO.NAME FROM SYS.SYSOBJECTS AS SO
	INNER JOIN SYS.SYSCONSTRAINTS AS SC ON SO.ID=SC.CONSTID
	INNER JOIN SYS.COLUMNS AS CO ON SC.COLID=CO.COLUMN_ID AND CO.NAME='column_name'
	INNER JOIN SYS.SYSOBJECTS AS SO2 ON CO.OBJECT_ID=SO2.ID AND SO2.XTYPE='U' AND SO2.NAME='table_name';

が、手元の環境では内部結合の方がコストが高いみたいです。

…もっとうまく書く方法があるかもしれないですが。

コメントはまだありません »

コメントはまだありません。

TrackBack URL : http://www.meibinlab.jp/nishijima/archives/144/trackback

コメントする