私は1つの結果セットを返すストアドプロシージャを持っています。ストアドプロシージャの結果セットをフィルタリングする
SELECT * FROM (CALL sproc()) AS sp WHERE sp.someField = 0;
これを行う方法があります: 私は、のようなものを、それを呼び出し、結果の行をフィルタリングできるようにしたいですか?
私は1つの結果セットを返すストアドプロシージャを持っています。ストアドプロシージャの結果セットをフィルタリングする
SELECT * FROM (CALL sproc()) AS sp WHERE sp.someField = 0;
これを行う方法があります: 私は、のようなものを、それを呼び出し、結果の行をフィルタリングできるようにしたいですか?
これを解決するにはいくつかの方法があります。最も簡単なのは、ストアドプロシージャを変更して結果セットを直接フィルタリングできるようにすることですが、何らかの理由でこれを行うことができないと仮定しています。
DECLARE @tablevar table(col1,..
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'
SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc'
EDIT:
旧:あなたはサブクエリを編集することができた場合は、次に行う必要がありますどのような
はそうのようなテーブル/一時テーブルにストアドプロシージャの結果を格納していますストアドプロシージャ: ... WHERE のCol1 = @のparam1と Col2に= @
PARAM2たMyTable * FROM を選択新PROCストアド:
....
SELECT
*
FROM
(SELECT
*
FROM
MyTable
WHERE
Col1 = @param1 AND
Col2 = @param2
) a
WHERE
Col3 = FilterRule1
多分、私は完全にここにあなたのストアドプロシージャを理解していないよと。ここのテンポラリテーブルは実際には最もパフォーマンスの良いソリューションではなく、やや面倒なこともありますが、それがうまくいくのであれば、それに付いて行きますが、ストアドプロシージャを変更するだけでは困る一時テーブルの代わりにサブクエリを使用します。
結果セットをSP内の一時テーブルに格納してから、その一時テーブルをクエリすることを選択しました。 – Ozzyberto
そのソリューションはあなたのために働いてうれしいです。ストアドプロシージャを更新できる場合は、テンポラリテーブルを使用せずにストアドプロシージャを再設計する方が良いかもしれませんが、それは価値があるよりも面倒かもしれません。 –