Ci sono un paio di modi per risolvere questo problema. Il modo più semplice sarebbe modificare la stored procedure per consentire di filtrare il set di risultati direttamente, ma suppongo che per qualche motivo non sia possibile farlo.
Quello che è necessario fare è quindi memorizzare i risultati della stored procedure in un tavolo da ping/temp 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 è possibile modificare il subquery:
Vecchio Stored Proc: ... SELEZIONA * DA MyTable DOVE Col1 = @ param1 E Col2 = @ param2
Nuova stored Proc:
....
SELECT
*
FROM
(SELECT
*
FROM
MyTable
WHERE
Col1 = @param1 AND
Col2 = @param2
) a
WHERE
Col3 = FilterRule1
ma forse non sto capire il vostro proc memorizzato qui completamente. Un tavolo temporaneo qui non è la soluzione più performante e può essere in qualche modo una seccatura, ma se funziona per te allora vai con esso, ma sto avendo problemi a immaginare una situazione in cui non si può semplicemente modificare il processo memorizzato in utilizzare una sottoquery anziché una tabella temporanea.
fonte
2013-06-04 18:19:55
Ho optato per memorizzare il set di risultati in una tabella temporanea all'interno dell'SP e quindi interrogare detta tabella temporanea. – Ozzyberto
Sono contento che la soluzione abbia funzionato per te. Se sei in grado di aggiornare il proc memorizzato probabilmente c'è un modo migliore per ridisegnare il tuo proc memorizzato senza dover usare una tabella temporanea, ma questo potrebbe essere più problematico di quanto valga. –