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

-- [SQL05_04.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--   ビュー表の WITH CHECK OPTION の効果を調べます
--

-- カレントデータベースを MySampleTest にする
    USE MySampleTest
GO

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


-- *******************************************************************
--  すでに同名のビュー表が存在していたらそれを削除する
--  INFORMATION_SCHEMA 所有者の VIEWS ビュー表を使ってビュー表の
--  存在検査ができます。sysobjectsテーブルを使ってもできます
-- *******************************************************************
    IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
                   WHERE TABLE_NAME = '社員VIEW')
       BEGIN   
              DROP VIEW 社員VIEW
       END
GO

-- ****************************************
--              ビュー表の登録
--        WITH CHECK OPTIONを付ける
--    1個のビュー表がバッチ単位を構成する
-- ****************************************
    CREATE VIEW 社員VIEW
    AS
        SELECT 社員コード , フリガナ , 氏名 FROM 社員
        WHERE (社員コード BETWEEN 100 and 200)
    WITH CHECK OPTION
GO


-- *******************************************************************
--  すでに同名の一時ストアドプロシージャが登録されているときは削除する
-- *******************************************************************
    IF EXISTS (SELECT name FROM tempdb..sysobjects
                  WHERE id =  object_id('tempdb..#Check') AND type = 'P ')  
        BEGIN
              DROP PROCEDURE  #Check
        END
GO

    CREATE PROCEDURE #Check
              @社員コード int ,
              @フリガナ   varchar(80) , 
              @氏名       varchar(40)
    AS
       DECLARE  @社員コード2 int ,
                @フリガナ2   varchar(80) , 
                @氏名2       varchar(40)

       SELECT @社員コード2 = 社員コード , 
              @フリガナ2   = フリガナ ,
              @氏名2       = 氏名
        FROM 社員
        WHERE 社員コード = @社員コード

       PRINT '' 
       -- 一致しましたか?
       IF (@社員コード=@社員コード2) AND (@フリガナ=@フリガナ2) AND ( @氏名=@氏名2)
           PRINT 'レコード番号[' + CAST(@社員コード AS varchar) + ']は正しく登録されました'     
       ELSE
           PRINT 'レコード番号[' + CAST(@社員コード AS varchar) + ']  ** 登録失敗 **'
GO


-- ****************************************
--              レコードの登録
-- ****************************************

    -- 前回実行時に登録されたデータを削除します
    DELETE FROM 社員VIEW WHERE 社員コード IN (150,180,199,500)
GO

--注)カナ文字は、半角カナです
    INSERT INTO 社員VIEW VALUES( 150 , 'ヤマダ タロウ1' , '山田 太郎1' )
    EXEC #Check 150 , 'ヤマダ タロウ1' , '山田 太郎1'

    INSERT INTO 社員VIEW VALUES( 180 , 'ヤマダ タロウ2' , '山田 太郎2' )
    EXEC #Check 180 , 'ヤマダ タロウ2' , '山田 太郎2'

   INSERT INTO 社員VIEW VALUES( 199 , 'ヤマダ タロウ3' , '山田 太郎3' )
    EXEC #Check 199 , 'ヤマダ タロウ3' , '山田 太郎3'

   -- このレコード登録は失敗します
    PRINT ''
    PRINT '社員コード[500]番は登録できません!!'
    PRINT ''
    INSERT INTO 社員VIEW VALUES( 500 , 'ヤマダ タロウ4' , '山田 太郎4' )
    EXEC #Check 500 , 'ヤマダ タロウ4' , '山田 太郎4'
GO


-- 一時ストアドプロシージャを削除する
    DROP PROCEDURE #Check
GO




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

ウィンドウを閉じる


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


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