MSDE FunClub 現在までのアクセスカウント数 最終更新日 : 2000/11/03
Microsoft Data Engine FunClub
Since 2000.11.03
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻)
【第22章447p 〜 453p掲載】

-- [SQL22_02.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--             http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--   Northwind デモデータベースをエクスポートした結果に対して
--   制約を設定します
-- このプログラムは、自動生成されたものを多少手直ししたものです
--
--

-- ( 件処理されました)のメッセージの表示を抑止します
    SET NOCOUNT ON
GO

--  接続先データベースの定義
    USE MySampleTest
GO

-- *********************************************
--        【運送会社】テーブルに制約を設定する
-- *********************************************
    --主キーの設定
    EXEC ALTTBL_NotNULL  '運送会社' , '運送コード' , 'INT'
    EXEC ALTTBL_SetPrimaryKey '運送会社' , '運送コード'

    --値要求[はい]の設定(NOT NULL)
    EXEC ALTTBL_NotNULL  '運送会社' , '運送会社' , 'VARCHAR(40)'

    --空文字列の許可[いいえ]の設定(空文字列入力を拒否する)
    EXEC ALTTBL_SetCHECK  '運送会社' , '運送会社' , '運送会社 <> '''' '
    EXEC ALTTBL_SetCHECK  '運送会社' , '電話番号' , '電話番号 <> '''' '

    --インデックスの作成(フラグ 0=重複あり 1=UNIQUE)
    EXEC ALTTBL_MakeIDX '運送会社' , '電話番号' , 0

    PRINT '【運送会社】テーブルに制約を設定しました'

GO

-- *********************************************
--        【仕入先】テーブルに制約を設定する
-- *********************************************
    --主キーの設定
    EXEC ALTTBL_NotNULL  '仕入先' , '仕入先コード' , 'INT'
    EXEC ALTTBL_SetPrimaryKey '仕入先' , '仕入先コード'

    --値要求[はい]の設定(NOT NULL)
    EXEC ALTTBL_NotNULL  '仕入先' , '仕入先名' , 'VARCHAR(40)'

    --空文字列の許可[いいえ]の設定(空文字列入力を拒否する)
    EXEC ALTTBL_SetCHECK  '仕入先' , 'フリガナ' , 'フリガナ <> '''' '
    EXEC ALTTBL_SetCHECK  '仕入先' , '仕入先名' , '仕入先名 <> '''' '
    EXEC ALTTBL_SetCHECK  '仕入先' , '担当者名' , '担当者名 <> '''' '
    EXEC ALTTBL_SetCHECK  '仕入先' , '部署' , '部署 <> '''' '
    EXEC ALTTBL_SetCHECK  '仕入先' , '郵便番号' , '郵便番号 <> '''' '
    EXEC ALTTBL_SetCHECK  '仕入先' , 'トドウフケン' , 'トドウフケン <> '''' '
    EXEC ALTTBL_SetCHECK  '仕入先' , '都道府県' , '都道府県 <> '''' '
    EXEC ALTTBL_SetCHECK  '仕入先' , '住所1' , '住所1 <> '''' '
    EXEC ALTTBL_SetCHECK  '仕入先' , '住所2' , '住所2 <> '''' '
    EXEC ALTTBL_SetCHECK  '仕入先' , '電話番号' , '電話番号 <> '''' '
    EXEC ALTTBL_SetCHECK  '仕入先' , 'ファクシミリ' , 'ファクシミリ <> '''' '
-- ホームページ列は、Text型のため、CHECK制約式の設定ができませんでした

    --DEFAULT制約の設定(Accessの式をSQLServerに直してください)
    EXEC ALTTBL_SetDEFAULT  '仕入先' , '仕入先コード' , '0'

    --インデックスの作成(フラグ 0=重複あり 1=UNIQUE)
    EXEC ALTTBL_MakeIDX '仕入先' , '仕入先名' , 0
    EXEC ALTTBL_MakeIDX '仕入先' , '電話番号' , 0
    EXEC ALTTBL_MakeIDX '仕入先' , '郵便番号' , 0

    PRINT '【仕入先】テーブルに制約を設定しました'

GO


-- *********************************************
--        【社員】テーブルに制約を設定する
-- *********************************************
    --主キーの設定
    EXEC ALTTBL_NotNULL  '社員' , '社員コード' , 'INT'
    EXEC ALTTBL_SetPrimaryKey '社員' , '社員コード'

    --値要求[はい]の設定(NOT NULL)
    EXEC ALTTBL_NotNULL  '社員' , '氏名' , 'VARCHAR(40)'

    --空文字列の許可[いいえ]の設定(空文字列入力を拒否する)
    EXEC ALTTBL_SetCHECK  '社員' , 'フリガナ' , 'フリガナ <> '''' '
    EXEC ALTTBL_SetCHECK  '社員' , '氏名' , '氏名 <> '''' '
    EXEC ALTTBL_SetCHECK  '社員' , '在籍支社' , '在籍支社 <> '''' '
    EXEC ALTTBL_SetCHECK  '社員' , '部署名' , '部署名 <> '''' '
    EXEC ALTTBL_SetCHECK  '社員' , '自宅郵便番号' , '自宅郵便番号 <> '''' '
    EXEC ALTTBL_SetCHECK  '社員' , '自宅都道府県' , '自宅都道府県 <> '''' '
    EXEC ALTTBL_SetCHECK  '社員' , '自宅住所1' , '自宅住所1 <> '''' '
    EXEC ALTTBL_SetCHECK  '社員' , '自宅住所2' , '自宅住所2 <> '''' '
    EXEC ALTTBL_SetCHECK  '社員' , '自宅電話番号' , '自宅電話番号 <> '''' '
    EXEC ALTTBL_SetCHECK  '社員' , '内線' , '内線 <> '''' '
-- プロフィール列は、Text型のため、CHECK制約式の設定ができませんでした

    --CHECK制約の設定(Accessの式をSQLServerに直してください)
    EXEC ALTTBL_SetCHECK  '社員' , '誕生日' , '誕生日 <GETDATE()'

    --インデックスの作成(フラグ 0=重複あり 1=UNIQUE)
    EXEC ALTTBL_MakeIDX '社員' , '氏名' , 0
    EXEC ALTTBL_MakeIDX '社員' , '自宅電話番号' , 0
    EXEC ALTTBL_MakeIDX '社員' , '自宅郵便番号' , 0

    PRINT '【社員】テーブルに制約を設定しました'
GO


-- *********************************************
--        【受注】テーブルに制約を設定する
-- *********************************************
    --主キーの設定
    EXEC ALTTBL_NotNULL  '受注' , '受注コード' , 'INT'
    EXEC ALTTBL_SetPrimaryKey '受注' , '受注コード'

    --空文字列の許可[いいえ]の設定(空文字列入力を拒否する)
    EXEC ALTTBL_SetCHECK  '受注' , '出荷先名' , '出荷先名 <> '''' '
    EXEC ALTTBL_SetCHECK  '受注' , '出荷先郵便番号' , '出荷先郵便番号 <> '''' '
    EXEC ALTTBL_SetCHECK  '受注' , '出荷先都道府県' , '出荷先都道府県 <> '''' '
    EXEC ALTTBL_SetCHECK  '受注' , '出荷先住所1' , '出荷先住所1 <> '''' '
    EXEC ALTTBL_SetCHECK  '受注' , '出荷先住所2' , '出荷先住所2 <> '''' '

    --DEFAULT制約の設定(Accessの式をSQLServerに直してください)
    EXEC ALTTBL_SetDEFAULT  '受注' , '得意先コード' , '0'
    EXEC ALTTBL_SetDEFAULT  '受注' , '運送料' , '0'

    --インデックスの作成(フラグ 0=重複あり 1=UNIQUE)
    EXEC ALTTBL_MakeIDX '受注' , '社員コード' , 0
    EXEC ALTTBL_MakeIDX '受注' , '受注日' , 0
    EXEC ALTTBL_MakeIDX '受注' , '出荷先郵便番号' , 0
    EXEC ALTTBL_MakeIDX '受注' , '出荷日' , 0
    EXEC ALTTBL_MakeIDX '受注' , '得意先コード' , 0

    PRINT '【受注】テーブルに制約を設定しました'
GO


-- *********************************************
--        【受注明細】テーブルに制約を設定する
-- *********************************************
    --主キーの設定
    EXEC ALTTBL_NotNULL  '受注明細' , '受注コード' , 'INT'
    EXEC ALTTBL_NotNULL  '受注明細' , '商品コード' , 'INT'
GO
    IF( (OBJECT_ID('PK_受注明細') IS NOT NULL) AND
           OBJECTPROPERTY(OBJECT_ID('PK_受注明細'),'IsPrimaryKey') = 1 )
        BEGIN
            ALTER TABLE 受注明細 DROP CONSTRAINT PK_受注明細
        END
GO
    ALTER TABLE 受注明細 ADD CONSTRAINT PK_受注明細 PRIMARY KEY ( 受注コード,商品コード)

    --値要求[はい]の設定(NOT NULL)
    EXEC ALTTBL_NotNULL  '受注明細' , '単価' , 'Money'
    EXEC ALTTBL_NotNULL  '受注明細' , '数量' , 'SMALLINT'
    EXEC ALTTBL_NotNULL  '受注明細' , '割引' , 'Real'

    --CHECK制約の設定(Accessの式をSQLServerに直してください)
    EXEC ALTTBL_SetCHECK  '受注明細' , '単価' , '単価 >=0'
    EXEC ALTTBL_SetCHECK  '受注明細' , '数量' , '数量 > 0'
    EXEC ALTTBL_SetCHECK  '受注明細' , '割引' , '割引 Between 0 And 1'

    --DEFAULT制約の設定(Accessの式をSQLServerに直してください)
    EXEC ALTTBL_SetDEFAULT  '受注明細' , '単価' , '0'
    EXEC ALTTBL_SetDEFAULT  '受注明細' , '数量' , '1'
    EXEC ALTTBL_SetDEFAULT  '受注明細' , '割引' , '0'

    --インデックスの作成(フラグ 0=重複あり 1=UNIQUE)
    EXEC ALTTBL_MakeIDX '受注明細' , '受注コード' , 0
    EXEC ALTTBL_MakeIDX '受注明細' , '商品コード' , 0

    PRINT '【受注明細】テーブルに制約を設定しました'
GO


-- *********************************************
--        【商品】テーブルに制約を設定する
-- *********************************************
    --主キーの設定
    EXEC ALTTBL_NotNULL  '商品' , '商品コード' , 'INT'
    EXEC ALTTBL_SetPrimaryKey '商品' , '商品コード'

    --値要求[はい]の設定(NOT NULL)
    EXEC ALTTBL_NotNULL  '商品' , '商品名' , 'VARCHAR(40)'

    --空文字列の許可[いいえ]の設定(空文字列入力を拒否する)
    EXEC ALTTBL_SetCHECK  '商品' , 'フリガナ' , 'フリガナ <> '''' '
    EXEC ALTTBL_SetCHECK  '商品' , '商品名' , '商品名 <> '''' '
    EXEC ALTTBL_SetCHECK  '商品' , '梱包単位' , '梱包単位 <> '''' '

    --CHECK制約の設定(Accessの式をSQLServerに直してください)
    EXEC ALTTBL_SetCHECK  '商品' , '単価' , '単価 >=0'
    EXEC ALTTBL_SetCHECK  '商品' , '在庫' , '在庫 >=0'
    EXEC ALTTBL_SetCHECK  '商品' , '発注済' , '発注済 >=0'
    EXEC ALTTBL_SetCHECK  '商品' , '発注点' , '発注点 >=0'

    --DEFAULT制約の設定(Accessの式をSQLServerに直してください)
    EXEC ALTTBL_SetDEFAULT  '商品' , '商品コード' , '0'
    EXEC ALTTBL_SetDEFAULT  '商品' , '単価' , '0'
    EXEC ALTTBL_SetDEFAULT  '商品' , '在庫' , '0'
    EXEC ALTTBL_SetDEFAULT  '商品' , '発注済' , '0'
    EXEC ALTTBL_SetDEFAULT  '商品' , '発注点' , '0'
    EXEC ALTTBL_SetDEFAULT  '商品' , '生産中止' , '0'

    --インデックスの作成(フラグ 0=重複あり 1=UNIQUE)
    EXEC ALTTBL_MakeIDX '商品' , '区分コード' , 0
    EXEC ALTTBL_MakeIDX '商品' , '仕入先コード' , 0
    EXEC ALTTBL_MakeIDX '商品' , '商品名' , 0

    PRINT '【商品】テーブルに制約を設定しました'
GO


-- *********************************************
--        【商品区分】テーブルに制約を設定する
-- *********************************************
    --主キーの設定
    EXEC ALTTBL_NotNULL  '商品区分' , '区分コード' , 'INT'
    EXEC ALTTBL_SetPrimaryKey '商品区分' , '区分コード'

    --値要求[はい]の設定(NOT NULL)
    EXEC ALTTBL_NotNULL  '商品区分' , '区分名' , 'VARCHAR(30)'

    --空文字列の許可[いいえ]の設定(空文字列入力を拒否する)
    EXEC ALTTBL_SetCHECK  '商品区分' , '区分名' , '区分名 <> '''' '
-- 説明列は、Text型のため、CHECK制約式の設定ができませんでした

    --インデックスの作成(フラグ 0=重複あり 1=UNIQUE)
    EXEC ALTTBL_MakeIDX '商品区分' , '区分名' , 1
    PRINT '【商品区分】テーブルに制約を設定しました'
GO


-- *********************************************
--        【都道府県】テーブルに制約を設定する
-- *********************************************
    --主キーの設定
    EXEC ALTTBL_NotNULL  '都道府県' , '都道府県' , 'VARCHAR(15)'
    EXEC ALTTBL_SetPrimaryKey '都道府県' , '都道府県'

    --空文字列の許可[いいえ]の設定(空文字列入力を拒否する)
    EXEC ALTTBL_SetCHECK  '都道府県' , 'トドウフケン' , 'トドウフケン <> '''' '
    EXEC ALTTBL_SetCHECK  '都道府県' , '都道府県' , '都道府県 <> '''' '
    PRINT '【都道府県】テーブルに制約を設定しました'
GO


-- *********************************************
--        【得意先】テーブルに制約を設定する
-- *********************************************
    --主キーの設定
    EXEC ALTTBL_NotNULL  '得意先' , '得意先コード' , 'INT'
    EXEC ALTTBL_SetPrimaryKey '得意先' , '得意先コード'

    --値要求[はい]の設定(NOT NULL)
    EXEC ALTTBL_NotNULL  '得意先' , '得意先名' , 'VARCHAR(40)'

    --空文字列の許可[いいえ]の設定(空文字列入力を拒否する)
    EXEC ALTTBL_SetCHECK  '得意先' , 'フリガナ' , 'フリガナ <> '''' '
    EXEC ALTTBL_SetCHECK  '得意先' , '得意先名' , '得意先名 <> '''' '
    EXEC ALTTBL_SetCHECK  '得意先' , '担当者名' , '担当者名 <> '''' '
    EXEC ALTTBL_SetCHECK  '得意先' , '部署' , '部署 <> '''' '
    EXEC ALTTBL_SetCHECK  '得意先' , '郵便番号' , '郵便番号 <> '''' '
    EXEC ALTTBL_SetCHECK  '得意先' , 'トドウフケン' , 'トドウフケン <> '''' '
    EXEC ALTTBL_SetCHECK  '得意先' , '都道府県' , '都道府県 <> '''' '
    EXEC ALTTBL_SetCHECK  '得意先' , '住所1' , '住所1 <> '''' '
    EXEC ALTTBL_SetCHECK  '得意先' , '住所2' , '住所2 <> '''' '
    EXEC ALTTBL_SetCHECK  '得意先' , '電話番号' , '電話番号 <> '''' '
    EXEC ALTTBL_SetCHECK  '得意先' , 'ファクシミリ' , 'ファクシミリ <> '''' '

    --インデックスの作成(フラグ 0=重複あり 1=UNIQUE)
    EXEC ALTTBL_MakeIDX '得意先' , '住所1' , 0
    EXEC ALTTBL_MakeIDX '得意先' , '電話番号' , 0
    EXEC ALTTBL_MakeIDX '得意先' , '都道府県' , 0
    EXEC ALTTBL_MakeIDX '得意先' , '得意先名' , 0
    EXEC ALTTBL_MakeIDX '得意先' , '郵便番号' , 0
    PRINT '【得意先】テーブルに制約を設定しました'
GO


-- **************************************************
--             【参照整合性制約の設定】               
 --  ALTTBL_SetRelation    主キーTable , 主キー列名 , 
 --                      外部キーTable , 外部キー列名 
-- ***************************************************
    EXEC ALTTBL_SetRelation '運送会社'   ,'運送コード'     ,'受注'     ,'運送区分'          
    EXEC ALTTBL_SetRelation '仕入先'     ,'仕入先コード'   ,'商品'     ,'仕入先コード'        
    EXEC ALTTBL_SetRelation '社員'       ,'社員コード'     ,'受注'     ,'社員コード'         
    EXEC ALTTBL_SetRelation '受注'       ,'受注コード'     ,'受注明細' ,'受注コード'         
    EXEC ALTTBL_SetRelation '商品区分'   ,'区分コード'     ,'商品'     ,'区分コード'         
    EXEC ALTTBL_SetRelation '商品'       ,'商品コード'     ,'受注明細' ,'商品コード'         
    EXEC ALTTBL_SetRelation '得意先'     ,'得意先コード'   ,'受注'     ,'得意先コード'        
    PRINT '【参照整合性制約】を設定しました'
GO
    PRINT ''
    PRINT '終了しました'
GO




技術評論社の書籍ガイドへ
下巻:ISBN4-7741-0966-5

ウィンドウを閉じる


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


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