Ci sono un paio di modi per risolvere questo problema. Il modo più semplice sarebbe modificare la procedura memorizzata per consentirti di filtrare direttamente il set di risultati, ma suppongo che per qualche motivo tu non sia in grado di farlo.
Quello che devi fare quindi è archiviare i risultati della procedura memorizzata in una tabella / tabella temporanea in questo modo:
DECLARE @tablevar table(col1,..
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'
SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc'
EDIT:se puoi modificare la sottoquery:
Vecchio processo memorizzato:...SELECT*FROMMyTableWHERECol1 =@param1 ANDCol2 =@param2
Nuovo processo memorizzato:
....
SELECT
*
FROM
(SELECT
*
FROM
MyTable
WHERE
Col1 = @param1 AND
Col2 = @param2
) a
WHERE
Col3 = FilterRule1
ma forse non capisco completamente il tuo processo memorizzato qui. Una tabella temporanea qui non è davvero la soluzione più performante e può essere un po' una seccatura, ma se funziona per te, allora vai con essa, ma ho problemi a immaginare una situazione in cui non potresti semplicemente modificare il tuo processo memorizzato in usa una sottoquery invece di una tabella temporanea.