2016-11-15 14 views
0

私は今、私が必要..今、私はデータセットに使用される結果として、2一時テーブルを持っへのアクセス一時テーブル外のストアドプロシージャ

Create Proc Hello (@id int,@name nvarchar(30)) 
as 
begin 
If (OBJECT_ID('tempdb..#Welcome') Is Not Null) Drop Table #Welcome 
select * into #Welcome from hello where [email protected] 
If (OBJECT_ID('tempdb..#Welcomes') Is Not Null) Drop Table #Welcomes 
select * into #Welcomes from hello where [email protected] 

end 

一時テーブルとして出力を与える

をストアドプロシージャています別のストアドプロシージャでこの#welcomeにアクセスするためには、ストアドプロシージャが完了したときに、ストアドプロシージャで作成し

Create Proc HelloThere(@ids int,@name nvarchar(10)) 
    as 
    begin 
     exec hello @id = @ids ,@name [email protected] 

     //select * from #Welcome(Here i need to access the #Welcome so i can perform inner join something like below// 

    select * from #welcome inner join Atable on #welcome.id=Atable.id 

    end 
+3

一時テーブルは、プロシージャ間でデータを共有する方法の1つで、唯一のものではなく、必ずしも最良のものではありません。このために一時テーブルをどのように使用するかなど、全体的な概要については、[here](http://www.sommarskog.se/share_data.html)を参照してください。 –

+0

ありがとうJereon非常に有用で有益な – havin

答えて

2

一時テーブルは第ので、自動的に削除されている意味..I呼び出し元のストアドプロシージャでは一時テーブルを使用できません。

周りの一時テーブルを維持するための一つの方法は、明示的に(CREATE TABLEまたはSELECT INTOを使用して)を呼び出すprocの中でテーブルを作成し、呼ばれるPROCでそれをロードすることです:@JeroenMostertはコメントで述べたように

CREATE PROC Hello @id int,@name nvarchar(30) 
AS 
INSERT INTO #Welcome SELECT * FROM hello where [email protected]; 
GO 

CREATE PROC HelloThere(@ids int,@name nvarchar(10)) 
AS 
If OBJECT_ID(N'tempdb..#Welcome', 'U') IS NOT NULL DROP TABLE #Welcome; 

SELECT * INTO #welcome FROM hello WHERE 0 = 1; 

EXEC hello @id = @ids ,@name [email protected]; 

SELECT * FROM #welcome INNER JOIN Atable ON #welcome.id=Atable.idl 

GO 

他のテクニックについては、http://www.sommarskog.se/share_data.htmlHow to Share Data between Stored Proceduresを閲覧することができます。

関連する問題