MSDE FunClub | 最終更新日 : 2000/11/03 | |
Microsoft Data Engine FunClub |
|
|
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