| 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