MSDE FunClub | 最終更新日 : 2000/08/11 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) | ||
【第5章315p 〜 318p掲載】 |
-- [SQL05_02.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- このSQLプログラムは、 -- テーブル分割を応用したビュー表です -- -- カレントデータベースを MySampleTest にする USE MySampleTest GO -- ( 件処理されました)のメッセージの表示を抑止する SET NOCOUNT ON GO -- ************************************************* -- テーブルやビュー表の作成権限が私にありますか? -- db_owner または db_ddladmin グループに許可される -- ************************************************* IF ( (IS_MEMBER('db_owner') <> 1 ) AND (IS_MEMBER('db_ddladmin') <> 1) ) BEGIN RAISERROR( 'CREATE TABLE や CREATE VIEW文の実行権限がありません' , 16 , 127 ) RETURN END GO -- **************************************************************** -- テーブルまたはビュー表を削除する一時ストアドプロシージャの作成 -- **************************************************************** CREATE PROCEDURE #TMP_DELETE @ObjName VARCHAR(40) , -- TABLE OR VIEW NAME @Flag CHAR(1) = 'U' -- TABLE='U' VIEW='V' AS -- TABLE or VIEW が存在しますか? IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ( (TABLE_NAME = @ObjName ) AND (TABLE_TYPE = CASE @Flag WHEN 'U' THEN 'BASE TABLE' WHEN 'V' THEN 'VIEW' END ) ) ) BEGIN IF ( @Flag = 'U' ) BEGIN -- TABLEの削除 EXEC( 'DROP TABLE ' + @ObjName ) END ELSE BEGIN -- VIEWの削除 EXEC( 'DROP VIEW ' + @ObjName ) END END GO -- ******************************************************** -- 1月、2月、3月と各月に対応した個別テーブルを作成する -- すでに同名のテーブルが存在していたらそれを削除する -- ******************************************************** EXEC #TMP_DELETE 'MON_1' , 'U' -- 1月分のテーブル削除 EXEC #TMP_DELETE 'MON_2' , 'U' -- 2月分のテーブル削除 EXEC #TMP_DELETE 'MON_3' , 'U' -- 3月分のテーブル削除 -- 1月分のテーブルを新規作成します CREATE TABLE MON_1 ( ID CHAR(4) CONSTRAINT PK_MON_1 PRIMARY KEY , -- 主キー DATA VARCHAR(20) , -- ここでは適当な文字列を記憶する MON INT DEFAULT 1 CHECK( MON = 1) -- これが分割テーブルを作るときの重要点! ) -- 見本データの登録 INSERT INTO MON_1(ID,DATA) VALUES( '1001' , 'TEST DATA 1001' ) INSERT INTO MON_1(ID,DATA) VALUES( '1002' , 'TEST DATA 1002' ) -- 2月分のテーブルを新規作成します CREATE TABLE MON_2 ( ID CHAR(4) CONSTRAINT PK_MON_2 PRIMARY KEY , DATA VARCHAR(20) , MON INT DEFAULT 2 CHECK( MON = 2) ) -- 見本データの登録 INSERT INTO MON_2(ID,DATA) VALUES( '2001' , 'TEST DATA 2001' ) INSERT INTO MON_2(ID,DATA) VALUES( '2002' , 'TEST DATA 2002' ) -- 3月分のテーブルを新規作成します CREATE TABLE MON_3 ( ID CHAR(4) CONSTRAINT PK_MON_3 PRIMARY KEY , DATA VARCHAR(20) , MON INT DEFAULT 3 CHECK( MON = 3) ) -- 見本データの登録 INSERT INTO MON_3(ID,DATA) VALUES( '3001' , 'TEST DATA 3001' ) INSERT INTO MON_3(ID,DATA) VALUES( '3002' , 'TEST DATA 3002' ) GO -- ******************************************************** -- 1月、2月、3月と各月を合成したビュー表を作成します -- すでに同名のビュー表が存在していたらそれを削除する -- ******************************************************** EXEC #TMP_DELETE 'MON_YEAR' , 'V' -- 合成用ビュー表の削除 GO -- 1月から3月の分割テーブルを合成するビュー表の作成 CREATE VIEW MON_YEAR( ID , DATA , MON ) AS SELECT * FROM MON_1 UNION ALL SELECT * FROM MON_2 UNION ALL SELECT * FROM MON_3 GO -- ************************* -- アプリケーションの実行 -- ************************* -- 全レコード表示 PRINT '' PRINT '全レコード表示' SELECT ID , DATA FROM MON_YEAR -- 1月と3月の表示 PRINT '1月と3月の部分表示' SELECT ID , DATA FROM MON_YEAR WHERE MON IN(1,3) GO -- 不要になった一時ストアドプロシージャを削除する DROP PROCEDURE #TMP_DELETE GO