質問

私は、WHERE句でストアドプロシージャの呼び出しでSELECTようにする必要があります。 それはそのような何かでなければなりません....

の別個のトップ10 i.x、d.droitを選択 v_droit Dから、v_info I WHERE d.nomdroit = 'Y-Y'       AND i.id <> 2       AND((EXECのup_droits(i.x、d.droit))からヴァルを選択し、<> 3

しかし、それは動作しません... 任意のアイデア?

機能で既存のコードを使用することはできませんので機能でストアドプロシージャを置き換えるために言ってはいけません。だから、機能が有効なオプションではありません。私は実際にストアドプロシージャを使用できるようにする必要があります。

役に立ちましたか?

解決

これは、最初にテーブルに対してクエリを実行し、#TEMPテーブルまたは@tabel変数に出力をキャプチャする、ストアドプロシージャを実行することによって達成されます。このような何かます:

declare @droits_table (val ,... );
insert into @droits_table
exec up_droits(param, param);
SELECT distinct top 10 i.x, d.droit FROM v_droit d, v_info i WHERE d.nomdroit='yy' AND i.id<>2 AND (select val from @droits) <>3
up_droitsは、クエリからi.xとd.droitパラメータを必要とするため、

もちろんこれはあなたのために動作しません。これはあなたのストアドプロシージャは、おそらくビューまたはテーブル値関数であることを示します。

他のヒント

申し訳ありませんが、それのテーブル値関数のではなく、ストアドプロシージャ作ります。

例:

Scalar - SELECT id, name FROM test WHERE id < (SELECT dbo.mytestfunction())
Table - SELECT id, name FROM test WHERE id = (SELECT col1 from dbo.mytestfunction())
あなたは、SQL Server上にある場合は、

私はあなたが提案する何ができるとは思いません。

しかし、あなたが行うことができます一つのことは、動的なクエリを構築、彼らは多くの興味深いproblemareasを開くので、それをやって注意が必要です。

構文は次のとおりです。

EXEC @<query>

しかし、あなたが#tableに選択した場合、あなたはあなたのために、おそらくはるかに優れている、行うことができますanotherthing、それはあなたの関数/プロシージャのスコープの期間一時的なもので、up_droits機能が一時テーブルでそれの結果を提供することです


declare procedure up_droits() as
select val .. into #temp

それでは、あなたが行うことはプロシージャを作成することです。


create procedure Top10FromDroit
begin
  exec up_droits
  SELECT distinct top 10 i.x, d.droit FROM v_droit d, v_info i WHERE d.nomdroit='yy' AND i.id2 AND (select val from (#temp) 3

うまくいけば、それはあなたが達成したい結果が得られます。

最初にあなたが成功しない場合は、^^その周りのコード

あなたの誰もが、ストアドプロシージャ内で動的SQLを実行するための理由を説明してもらえます。私はあなたがそれらを必要なときに非常に少数の状況を知っている - しかし、実際には非常に少ないです。実行文字列の99.9%(または1000の999)は、パラメータを持つ通常のSQL文のように書き換えることができます。

非常に同じ選択または句内部機能を有する選択である。

それを解決する方法はないの手続き方法についてのデータを、あなたのセットについて考えてみます。

scroll top