2011-06-23 17 views
5

以下に示すようなストアドプロシージャ内で使用するストアドプロシージャを作成する必要があります。これは可能ですか?SQL Server 2008で別のストアドプロシージャ内でストアドプロシージャを作成する方法

CREATE procedure parentSP 
as 

--child SP definition. 
CREATE procedure childSP1 @inputArg varchar(50) 
as 
--do something. 
Go 

--call child sp within parentSP 
execute childSP1 '10' 

Go 
+2

これは奇妙な要件liksだ - これを行うためのあなたの動機は何ですか? –

+0

あなたの質問に答えて、私はストアドプロシージャ内でストアドプロシージャを作成する必要があります。推論の理由は、filepropertyキーワードを使用するカスタムストアドプロシージャを使用してtempdbの使用状況を追跡することです。現在のデータベースコンテキスト内でのみ使用できます。私は正確な結果を得ることができるように、tempdbの中にサブストアドprocを作成しておき、ストアドプロシージャが存在するかどうかをチェックします。 tempdbは毎回再作成されるので、保存されたproc作成コードを保持する必要がありますが、毎回それを再作成する心配はありません。 –

+0

これを実行したい理由は、プロシージャー、関数、タイプなどをこのプロシージャーに対してのみ一時的に作成し、プロシージャーが完了する前にそれらをすべて削除したい場合です。 – Ellis

答えて

8

あなたは、execを使用することができます:

CREATE procedure parentSP 
as 
exec('CREATE procedure childSP1 @inputArg varchar(50) 
as 
--do something.') 

--call child sp within parentSP 
execute childSP1 '10' 
Go 
+1

もちろん、プロシージャを後で削除する場合(または、プロシージャが存在しない場合にのみ内部作成を実行する場合を除いて)、2回目の実行時にエラーが発生します。 –

+0

即座にストアprocを作成する場合は、それを使用して完了しました。 – kheya

関連する問題