| 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