これを解決するには、いくつかの方法があります。最も簡単なのは、結果セットを直接フィルタリングできるようにストアドプロシージャを変更することですが、何らかの理由でこれを実行できないと想定しています。
次に行う必要があるのは、次のように、ストアドプロシージャの結果をテーブル/一時テーブルに格納することです。
DECLARE @tablevar table(col1,..
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'
SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc'
編集:サブクエリを編集できる場合:
古いストアドプロシージャ:... SELECT * FROMMyTableWHERECol1 =@ param1 ANDCol2 =@ param2
新しいストアドプロシージャ:
....
SELECT
*
FROM
(SELECT
*
FROM
MyTable
WHERE
Col1 = @param1 AND
Col2 = @param2
) a
WHERE
Col3 = FilterRule1
しかし、ここでストアドプロシージャを完全に理解していない可能性があります。ここの一時テーブルは実際には最もパフォーマンスの高いソリューションではなく、多少面倒な場合がありますが、それがうまくいく場合はそれを使用しますが、ストアドプロシージャを次のように変更できない状況を想像するのに苦労しています一時テーブルの代わりにサブクエリを使用します。