Mysql
 sql >> Database >  >> RDS >> Mysql

Filtraggio del set di risultati di una stored procedure

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.