MSDE FunClub | 最終更新日 : 2000/07/22 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) | ||
【第2章195p 〜 197p掲載】 |
-- [DDL系SQL文の基礎(例題13)EX3-11.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- このSQLプログラムは、 -- 指定されたテーブルの指定された列のデフォルト値を設定します -- これから操作する既定のデータベースを MySampleTest にします USE MySampleTest GO -- ( 件処理されました)のメッセージの表示を抑止します SET NOCOUNT ON GO -- ****************************************************** -- デフォルト値設定を行なうストアドプロシージャの登録 -- ****************************************************** IF( (object_id('SetDefaultValue') IS NOT NULL) AND OBJECTPROPERTY( object_id('SetDefaultValue' ) , 'IsProcedure' ) = 1 ) BEGIN DROP PROCEDURE SetDefaultValue END GO CREATE PROCEDURE SetDefaultValue @TblName sysname , -- 対象となるテーブル @ColName sysname , -- 対象となる列の名前 @Default varchar(80) , -- 設定を行なうデフォルト値 @DelFlag int -- 0:デフォルト値の削除を行なう -- 1:デフォルト値の削除と登録を行なう AS SET NOCOUNT ON DECLARE @Def varchar(80) DECLARE @ConstNm varchar(80) -- DEFAULT値の制約名 DECLARE @cmd varchar(256) -- 動的SQL文 --デフォルト値が列に設定されているかどうか調査する --システムビュー表を調査する --デフォルト値の設定文字列の取得 SELECT @Def=COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE((TABLE_NAME=@TblName) AND (COLUMN_NAME=@ColName)) -- デフォルト値の制約名を取得する -- sysobjects テーブルを以下のように検索する SELECT @ConstNm = name FROM sysobjects WHERE( ( xtype = 'D ' ) -- DEFAULT制約は 'D 'となる AND (OBJECT_NAME( parent_obj )= @TblName) -- 制約が設定されたテーブル AND (COL_NAME(parent_obj,info)= @ColName) -- DEFAULT制約が付けられた列の名前 ) -- デフォルト値の制約名が取得できましたか? -- 初めての時は、制約名を作成します(DF_テーブル名_列の名前) -- SQL7.0では DF_Tblname_Column -- MSDE では DF__Tblname__Column -- 何で、MSDEのデフォルト制約名のアンダーバーは、2個なの? -- ここでは、SQl7の方に合わせました IF( @ConstNm IS NULL ) SELECT @ConstNm = 'DF_' + @TblName + '_' + @ColName IF( @Def IS NOT NULL ) BEGIN -- デフォルト値が設定されている PRINT '削除前のデフォルト値 = ' + @def -- デフォルト値の制約を削除する EXEC( 'ALTER TABLE ' + @TblName + ' DROP CONSTRAINT ' + @ConstNm ) END ELSE BEGIN PRINT '[' + @ColName + ']列には、デフォルト値の設定はありませんでした' END IF( @DelFlag = 0 ) RETURN 0 -- 新しいデフォルト値の設定を行なう SELECT @cmd = 'ALTER TABLE ' + @TblName + ' ADD ' + 'CONSTRAINT ' + @ConstNm + ' DEFAULT ' + @Default + ' FOR ' + @ColName --PRINT @cmd --PRINT '' EXECUTE( @cmd ) RETURN 0 GO -- デフォルト値の設定例 EXEC SetDefaultValue '受注' , '社員コード' , '10' , 1 --数字の設定 EXEC SetDefaultValue '受注' , '得意先コード' , '999' , 1 EXEC SetDefaultValue '受注' , '出荷先名' , '''ヤマト''' , 1 --文字列の設定 EXEC SetDefaultValue '受注' , '受注日' , 'GETDATE()' , 1 --関数の設定 GO