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