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

-- [DDL系SQL文の基礎(例題8)EX3-07.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--   AccessのNorthwindデータベースの社員テーブルを除く、残り
--   すべてのテーブルを作成するものです
--
--   Access95/97 テキスト型のサイズはバイト数です
--   Access2000のテキスト型のサイズはUnicodeでの文字数です
--   Access2000の場合は、nchar型/nvarchar型を使ってください
--   もしくは文字数を2倍にしてバイト数に換算して、char型/varchar型
--   を使ってください
--   ここでは 単純に、Access95/97 でのテーブル移行を考えています
--

-- これから操作する既定のデータベースを MySampleTest にします
    USE MySampleTest
GO

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


--同名のストアドプロシージャを削除
    IF EXISTS (SELECT name FROM sysobjects
               WHERE name = 'PROC_表削除' AND type = 'P ' )  
       BEGIN
             DROP PROCEDURE PROC_表削除
             PRINT 'ストアドプロシージャ [PROC_表削除]を削除しました'
       END
GO

-- テーブルの存在を調べ、存在したらそれを削除する
-- ストアドプロシージャの登録
    CREATE  PROCEDURE PROC_表削除
            @tblname  varchar(30)    -- 削除する表の名前
    AS
        DECLARE @sqlstr varchar(80)      -- SQL文の文字列
        IF EXISTS (SELECT name FROM sysobjects
                      WHERE name = @tblname AND type = 'U ' )  
           BEGIN
               SELECT @sqlstr = 'DROP TABLE ' + @tblname
               EXECUTE( @sqlstr )
               PRINT @sqlstr
           END
GO


-- 表を削除する
--   削除する順番は、参照整合性の多側テーブル(外部キー側)から削除する
    EXECUTE  PROC_表削除 '受注明細'
    EXECUTE  PROC_表削除 '商品'
    EXECUTE  PROC_表削除 '商品区分'
    EXECUTE  PROC_表削除 '仕入先'
    EXECUTE  PROC_表削除 '受注'
    EXECUTE  PROC_表削除 '運送会社'
    EXECUTE  PROC_表削除 '得意先'
    EXECUTE  PROC_表削除 '都道府県'
    -- EXECUTE  PROC_表削除 '社員'   EX03-06 の例題です(ここでは削除しない)
GO


-- 表を作成する
--   作成する順番は削除と逆。参照整合性の主キー側から。


-- *****************
--    【得意先】
-- *****************
    CREATE TABLE 得意先
   (
    --主キー(オートナンバー型)
        得意先コード int  IDENTITY(1,1) NOT NULL  CONSTRAINT PK_得意先 Primary key ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
        フリガナ  varchar(40)  CHECK( フリガナ <> '' ) ,

    --値要求[はい] 空文字列の許可[いいえ] インデックス[重複あり]
        得意先名  varchar(40)  NOT NULL CHECK(得意先名 <> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
        担当者名  varchar(30) CHECK(担当者名 <> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
        部署 varchar(30) CHECK( 部署<> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[重複あり]
        郵便番号  varchar(10) CHECK( 郵便番号<> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
        トドウフケン varchar(30)  CHECK( トドウフケン<> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[重複あり]
        都道府県 varchar(15) CHECK( 都道府県<> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[重複あり]
        住所1 varchar(60) CHECK( 住所1<> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
        住所2 varchar(60)  CHECK( 住所2<> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[重複あり]
        電話番号  varchar(24)  CHECK( 電話番号<> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
        ファクシミリ varchar(24)  CHECK( ファクシミリ<> '') 
    )

-- [重複あり]インデックスの作成
    CREATE INDEX IDX_得意先名 ON 得意先( 得意先名 )
    CREATE INDEX IDX_郵便番号 ON 得意先( 郵便番号 )
    CREATE INDEX IDX_都道府県 ON 得意先( 都道府県 )
    CREATE INDEX IDX_住所1    ON 得意先( 住所1    )
    CREATE INDEX IDX_電話番号 ON 得意先( 電話番号 )
GO


-- *****************
--    【運送会社】
-- *****************
    CREATE TABLE 運送会社
    (
    --主キー(オートナンバー型)
    運送コード int IDENTITY(1,1) NOT NULL CONSTRAINT PK_運送会社 Primary key ,

    --値要求[はい] 空文字列の許可[いいえ] インデックス[いいえ]
    運送会社   varchar(40) NOT NULL  CHECK( 運送会社<> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[重複あり]
    電話番号   varchar(24)   CHECK(  電話番号 <> '')
    )

-- [重複あり]インデックスの作成
    CREATE INDEX IDX_電話番号 ON 運送会社( 電話番号 )
GO


-- *****************
--    【受注】
-- *****************
    CREATE TABLE 受注
    (
    --主キー
    受注コード   int NOT NULL CONSTRAINT PK_受注 Primary key ,

    --値要求[いいえ] インデックス[重複あり] 既定値[=0]
    得意先コード int DEFAULT 0 ,

    --値要求[いいえ] インデックス[重複あり]
    社員コード int ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    出荷先名 varchar(40)  CHECK(  出荷先名 <> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[重複あり]
    出荷先郵便番号 varchar(10) CHECK(  出荷先郵便番号 <> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    出荷先都道府県 varchar(20) CHECK(  出荷先都道府県 <> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    出荷先住所1 varchar(60)    CHECK(  出荷先住所1 <> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    出荷先住所2 varchar(60)  CHECK(  出荷先住所2 <> ''),

    --値要求[いいえ] インデックス[いいえ]
    運送区分 int ,

    --値要求[いいえ] インデックス[重複あり]
    受注日   datetime  ,

    --値要求[いいえ] インデックス[いいえ]
    締切日   datetime ,

    --値要求[いいえ] インデックス[重複あり]
    出荷日   datetime ,

    --値要求[いいえ] インデックス[いいえ]  既定値[=0]
    運送料   money DEFAULT 0 ,

    -- *****************
    -- 参照整合性の定義
    -- *****************    
    FOREIGN KEY(得意先コード)  REFERENCES 得意先  (得意先コード) ,
    FOREIGN KEY(社員コード)    REFERENCES 社員    (社員コード) ,
    FOREIGN KEY(運送区分)      REFERENCES 運送会社(運送コード)
  )

-- [重複あり]インデックスの作成
    CREATE INDEX IDX_得意先コード     ON 受注( 得意先コード )
    CREATE INDEX IDX_社員コード       ON 受注( 社員コード   )
    CREATE INDEX IDX_出荷先郵便番号   ON 受注( 出荷先郵便番号   )
    CREATE INDEX IDX_受注日           ON 受注( 受注日 )
    CREATE INDEX IDX_出荷日           ON 受注( 出荷日 )
GO


-- *****************
--    【仕入先】
-- *****************
    CREATE TABLE 仕入先
    (
    --主キー  既定値[=0]
    --注意:Accessの設計では既定値の設定があるが、主キーに既定値があるのは変です
    仕入先コード int NOT NULL CONSTRAINT PK_仕入先 Primary key ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    フリガナ  varchar(80)   CHECK(  フリガナ <> ''),

    --値要求[はい] 空文字列の許可[いいえ] インデックス[重複あり]
    仕入先名  varchar(40) NOT NULL  CHECK(  仕入先名 <> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    担当者名  varchar(30)  CHECK(  担当者名 <> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    部署 varchar(30)  CHECK(  部署 <> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[重複あり]
    郵便番号 varchar(10) CHECK(  郵便番号 <> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    トドウフケン varchar(30)  CHECK( トドウフケン <> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    都道府県  varchar(15)  CHECK( 都道府県<> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    住所1 varchar(60)  CHECK( 住所1<> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    住所2 varchar(60) CHECK( 住所2<> '') ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[重複あり]
    電話番号 varchar(24) CHECK( 電話番号<> ''),

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    ファクシミリ varchar(24) CHECK( ファクシミリ<> ''),

    --値要求[いいえ] 空文字列の許可[いいえ](Accessのハイパーリンク型はありません)
    --残念ながら TEXT型にCHECK制約は作れません
    ホームページ text 
)

-- [重複あり]インデックスの作成
    CREATE INDEX IDX_仕入先名     ON 仕入先( 仕入先名 )
    CREATE INDEX IDX_郵便番号     ON 仕入先( 郵便番号 )
    CREATE INDEX IDX_電話番号     ON 仕入先( 電話番号 )
GO


-- *****************
--    【商品区分】
-- *****************
    CREATE TABLE 商品区分
   (
    --主キー(オートナンバー型)
    区分コード int IDENTITY(1,1) NOT NULL CONSTRAINT PK_商品区分 Primary key ,

    --値要求[はい] 空文字列の許可[いいえ] インデックス[重複なし]
    区分名 varchar(30) NOT NULL  CHECK(  区分名<> '')  UNIQUE , 

    --値要求[いいえ] 空文字列の許可[いいえ]
    --残念ながら TEXT型にCHECK制約は作れません
    説明  text ,

    --値要求[いいえ] 
    図 image 
   )
GO


-- *****************
--    【商品】
-- *****************
    CREATE TABLE 商品
   (
    --主キー  既定値[=0]
    --注意:Accessの設計では既定値の設定があるが、主キーに既定値があるのは変です
    商品コード int NOT NULL CONSTRAINT PK_商品 Primary key ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    フリガナ varchar(80) CHECK( フリガナ<> ''),

    --値要求[はい] 空文字列の許可[いいえ] インデックス[重複あり]
    商品名   varchar(40) NOT NULL ,

    --値要求[いいえ] インデックス[重複あり]
    仕入先コード int ,

    --値要求[いいえ] インデックス[重複あり]
    区分コード   int ,

    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    梱包単位 varchar(20) CHECK( 梱包単位<> ''),

    --値要求[いいえ] インデックス[いいえ] 既定値[=0]
    単価  money  DEFAULT 0  CHECK(  単価 >= 0 ),

    --値要求[いいえ] インデックス[いいえ] 既定値[=0]
    在庫  smallint DEFAULT 0  CHECK(  在庫 >= 0 ),

    --値要求[いいえ] インデックス[いいえ] 既定値[=0]
    発注済 smallint DEFAULT 0  CHECK( 発注済 >= 0 ),

    --値要求[いいえ] インデックス[いいえ] 既定値[=0]
    発注点 smallint DEFAULT 0  CHECK( 発注点 >= 0 ),

    --値要求[いいえ] インデックス[いいえ] 既定値[=0]
    生産中止 bit DEFAULT 0 ,

    -- *****************
    -- 参照整合性の定義
    -- *****************    
    FOREIGN KEY(仕入先コード)  REFERENCES 仕入先  (仕入先コード) ,
    FOREIGN KEY( 区分コード )  REFERENCES 商品区分( 区分コード )
   )

-- [重複あり]インデックスの作成
    CREATE INDEX IDX_商品名       ON  商品(  商品名 )
    CREATE INDEX IDX_仕入先コード ON  商品( 仕入先コード )
    CREATE INDEX IDX_区分コード   ON  商品(  区分コード  )
GO


-- *****************
--    【受注明細】
-- *****************
    CREATE TABLE 受注明細
   (
    --値要求[いいえ->はいに変更しました]  インデックス[重複あり]
    受注コード int NOT NULL,

    --値要求[はい]  インデックス[重複あり]
    商品コード int NOT NULL ,

    --値要求[はい] インデックス[いいえ] 既定値[=0]
    単価 money NOT NULL DEFAULT 0 ,

    --値要求[はい] インデックス[いいえ] 既定値[=1]
    数量 smallint NOT NULL DEFAULT 1 CHECK(  数量 > 0 ) ,

    --値要求[はい] インデックス[いいえ] 既定値[=0]
    割引 real NOT NULL DEFAULT 0  CHECK( 割引 BETWEEN 0 AND 1 ) ,

    --連結主キーの設定
    CONSTRAINT PK_受注明細 PRIMARY KEY ( 受注コード,  商品コード),

    -- *****************
    -- 参照整合性の定義
    -- *****************    
    FOREIGN KEY(受注コード)  REFERENCES 受注 (受注コード),
    FOREIGN KEY(商品コード)  REFERENCES 商品 (商品コード)
   )
-- [重複あり]インデックスの作成
    CREATE INDEX IDX_受注コード   ON  受注明細( 受注コード )
    CREATE INDEX IDX_商品コード   ON  受注明細( 商品コード )
GO


-- *****************
--    【都道府県】
-- *****************
    CREATE TABLE 都道府県
   (
    --値要求[いいえ] 空文字列の許可[いいえ] インデックス[いいえ]
    トドウフケン varchar(30) CHECK( トドウフケン<> ''),

    --主キーの設定
    都道府県 varchar(15) NOT NULL CONSTRAINT PK_都道府県 Primary key 
)
GO
















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

ウィンドウを閉じる


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


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