2013-06-04 12 views

risposta

4

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.

+1

Ho optato per memorizzare il set di risultati in una tabella temporanea all'interno dell'SP e quindi interrogare detta tabella temporanea. – Ozzyberto

+0

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. –

Problemi correlati