SQLSERVER2008 R2 にてSQL内でストアドの結果を内部結合で使用するには。

SQLSERVER2008 R2 にてSQL内でストアドの結果を内部結合で使用するには。 ストアドの利用に仕方についてご質問があります。 以下のストアドを作成します。 create procedure [dbo].[sp_uriage] @uribiFrom char(8), @uribiTo char(8) as select uribi,kokyakcd from dbo.T_Uriage as N with(nolock) where uribi between @uribiFrom and @uribiTo go その後、次のSQLを実行すればデータを参照できるのは確認できました。 execute [dbo].[sp_uriage] '20130501','20130501' 今度このストアドで求められる結果を「INNER JOIN」をつかって利用したいのですが どのようにSQLを書けばいいのかわかりません。 select A.* from dbo.kokyak as A INNER JOIN ( execute [dbo].[sp_uriage] '20130501','20130501' ) as B ON A.kokyakcd = B.kokyakcd と記述しても「キーワードexec付近に不適切な構文があります」 など出てきて利用できません。 何かヒントを頂けないでしょうか?

SQL Server8,015閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

残念ですがストアドプロシージャはクライアントプログラムに結果セットを返しますが、サーバー側のSQLで直接使用することは出来ません。 ストアドプロシージャをユーザー定義表関数に書き換える必要があります。 create function [dbo].[f_uriage] returns @rec_uriage TABLE ( uribiFrom char(8), uribiTo char(8) ) as begin insert @rec_uriage select uribi,kokyakcd from dbo.T_Uriage as N with(nolock) where uribi between @uribiFrom and @uribiTo; return; end; go のようにして SELECT * FROM dbo.f_uriage( '20130501','20130501' ) を実行すればおそらくストアドプロシージャと同じ結果を得られると思います。 これなら、INNER JOINに使えると思います。

ThanksImg質問者からのお礼コメント

ありがとうございます。 関数を利用する方法は思い付きませんでした。 いいヒントになりました。 色々試して見ます。

お礼日時:2013/5/27 22:26

その他の回答(1件)

0

プロシージャーの結果はテーブルではないので、内部結合は出来ないはずです。テーブルを内部結合したプロシージャーを別に作るしかないと思います。