MSDE FunClub 現在までのアクセスカウント数 最終更新日 : 2000/08/11
Microsoft Data Engine FunClub
Since 2000.08.11
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




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

ウィンドウを閉じる


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


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