MSDE FunClub | 最終更新日 : 2000/08/11 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻) | ||
【第4章298p 〜 300p掲載】 |
-- [SQL04_11.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- このSQLプログラムは、ストアドプロシージャの名前をローカル変数名 -- に代入してストアドプロシージャを呼び出す例です -- カレントデータベースを MySampleTest にする USE MySampleTest GO -- ( 件処理されました)のメッセージを抑止する SET NOCOUNT ON GO -- ******************************* -- 一時オブジェクトの削除処理 -- ******************************* CREATE PROCEDURE Delete_TempObject @objnm sysname , @type char(2) AS DECLARE @nm sysname SET NOCOUNT ON SELECT @nm = 'tempdb..' + @objnm IF( @type = 'U ' ) -- ローカル一時テーブルの削除処理 BEGIN IF EXISTS (SELECT name FROM tempdb..sysobjects WHERE( (id = object_id(@nm)) AND type = 'U ') ) BEGIN --PRINT 'テーブル ' + @objnm + 'を削除します' EXEC( 'DROP TABLE ' + @objnm ) -- テーブル削除 END END ELSE IF( @type = 'P ' ) -- ローカル一時ストアドプロシージャの削除 BEGIN IF EXISTS (SELECT name FROM tempdb..sysobjects WHERE( (id = object_id(@nm)) AND type = 'P ') ) BEGIN --PRINT 'プロシージャ' + @objnm + 'を削除します' EXEC( 'DROP PROCEDURE ' + @objnm ) -- プロシージャの削除 END END GO -- ******************************* -- 既存オブジェクトを削除する -- ******************************* EXEC Delete_TempObject '#TMP_PROC1' , 'P ' EXEC Delete_TempObject '#TMP_PROC2' , 'P ' EXEC Delete_TempObject '#TMP_PROC3' , 'P ' GO -- ******************************* -- ストアドプロシージャの登録 -- ******************************* -- 【その1】 CREATE PROCEDURE #TMP_PROC1 @Param1 varchar(80) = NULL AS RAISERROR( 'その1が実行されました(パラメータ) = %s' , 0 , 1 , @Param1 ) GO --【その2】 CREATE PROCEDURE #TMP_PROC2 @Param2 varchar(80) = NULL AS RAISERROR( 'その2が実行されました(パラメータ) = %s' , 0 , 1 , @Param2 ) GO -- 【その3】 CREATE PROCEDURE #TMP_PROC3 @ProcNm varchar(10) , -- 実行するストアドプロシージャの名前 @Param3 varchar(80) = NULL -- 渡すパラメータの値 AS -- 実行するストアドプロシージャの名前は引数で渡されます EXEC @ProcNm @Param3 GO -- ******************************** -- アプリケーションの実行 -- ******************************** DECLARE @ProcName varchar(10) -- 【その1】の実行 PRINT '' SELECT @ProcName = '#TMP_PROC1' EXEC @ProcName @Param1 = @ProcName -- 【その2】の実行 PRINT '' SELECT @ProcName = '#TMP_PROC2' EXEC @ProcName @Param2 = @ProcName -- 【その1】の実行 PRINT '' EXEC #TMP_PROC3 '#TMP_PROC1' , '#TMP_PROC3から呼び出しました' -- 【その2】の実行 PRINT '' EXEC #TMP_PROC3 '#TMP_PROC2' , '#TMP_PROC3から呼び出しました' GO -- 削除する EXEC Delete_TempObject '#TMP_PROC1' , 'P ' EXEC Delete_TempObject '#TMP_PROC2' , 'P ' EXEC Delete_TempObject '#TMP_PROC3' , 'P ' DROP PROC Delete_TempObject GO