| MSDE FunClub |
|
最終更新日 : 2000/08/08 |
|
Microsoft Data Engine FunClub
|
Since 2000.08.08
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) |
|
【第3章246p 〜 248p掲載】 |
-- [SQL03_10.SQL]
-- SQLServer7.0 Transact-SQL言語
-- 日本技術ソフト開発 堀川 明
-- http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
-- スクリプト全体を強制終了させるためにローカル一時
-- テーブルを活用した例題です
--
-- ( 件処理されました)の表示を抑制する
SET NOCOUNT ON
GO
-- **************************************************
-- 既存のオブジェクトが存在したらそれを削除します
-- 一時オブジェクトはtempdbに作成されます
-- **************************************************
USE tempdb
GO
IF( (object_id('tempdb..#ERROR_TBL') IS NOT NULL ) AND
OBJECTPROPERTY(object_id('tempdb..#ERROR_TBL'),'IsTable') = 1 )
BEGIN
PRINT '#ERROR_TBL一時テーブルを削除します'
DROP TABLE #ERROR_TBL
END
IF ( (object_id('tempdb..#IsEnd') IS NOT NULL ) AND
OBJECTPROPERTY(object_id('tempdb..#IsEnd'),'IsProcedure') = 1 )
BEGIN
PRINT '#IsEnd一時ストアドプロシージャを削除します'
DROP PROCEDURE #IsEnd
END
GO
-- ****************************************************************
-- 【ローカル一時テーブルの作成】
-- ここでは、レコードが存在したら強制終了のために使用します
-- 列の中に、アプリケーションに応じて有効な情報を入れてください
-- ****************************************************************
CREATE TABLE #ERROR_TBL( msg varchar(80) )
GO
-- ****************************************************************
-- 【ローカル一時ストアドプロシージャの作成】
-- バッチ処理を実行してもよろしいですか?
-- #ERROR_TBLテーブルの中にレコードが存在しなければ、OKです
-- レコードが存在したら、強制終了します
-- ****************************************************************
CREATE PROCEDURE #IsEnd
AS
SET NOCOUNT ON
-- レコードが存在したら戻り値は真を返す
IF EXISTS ( SELECT * FROM #ERROR_TBL ) RETURN 1
-- レコードが存在しなければ偽を返す
RETURN 0
GO
-- **************************
-- 【アプリケーション開始】
-- **************************
-- わざとエラーを発生させます
SELECT * FROM #TMP_NOEXISTS
GO
-- エラーが起きたらレコードを登録します
IF( @@ERROR <> 0 ) INSERT INTO #ERROR_TBL VALUES( '強制終了' )
GO
-- バッチの先頭で継続実行が許可されているかどうかテストする
DECLARE @Ret int
EXEC @Ret = #IsEnd
IF( @Ret = 1 ) RETURN
PRINT 'このPRINT 文は実行されません'
GO
-- バッチの先頭で継続実行が許可されているかどうかテストする
DECLARE @Ret int
EXEC @Ret = #IsEnd
IF( @Ret = 1 ) RETURN
PRINT 'このPRINT 文は実行されません'
GO
-- 終了処理
DROP TABLE #ERROR_TBL
DROP PROCEDURE #IsEnd
GO