MSDE FunClub 現在までのアクセスカウント数 最終更新日 : 2000/07/22
Microsoft Data Engine FunClub
Since 2000.07.22
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

















技術評論社の書籍ガイドへ
上巻:ISBN4-7741-0965-7

ウィンドウを閉じる


(株)日本技術ソフト開発 責任編集:堀川 明
MSDE FunClubに関するご意見・ご要望等ございましたら、 msdefun@horikawa.ne.jp までご連絡下さい。
HOME: http://www.horikawa.ne.jp/msde/


MSDE FunClubの運営は、マイクロソフト社とは一切の関係はありません