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