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