sql >> Base de Datos >  >> RDS >> Mysql

Filtrado del conjunto de resultados de un procedimiento almacenado

Hay un par de maneras de resolver esto. Lo más fácil sería modificar el procedimiento almacenado para permitirle filtrar el conjunto de resultados directamente, pero asumo que, por alguna razón, no puede hacerlo.

Lo que deberá hacer entonces es almacenar los resultados del procedimiento almacenado en una tabla / tabla temporal de esta manera:

DECLARE @tablevar table(col1,..
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'

SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc'

EDITAR:si puede editar la subconsulta:

Proceso antiguo almacenado:... SELECCIONE*FROMMyTableWHERECol1 =@param1 ANDCol2 =@param2

Nuevo proceso almacenado:

....
SELECT
*
FROM
   (SELECT
      *
   FROM
      MyTable
   WHERE
      Col1 = @param1 AND
      Col2 = @param2
   ) a
WHERE
   Col3 = FilterRule1

pero tal vez no entiendo completamente su proceso almacenado aquí. Una tabla temporal aquí no es realmente la solución de mayor rendimiento y puede ser algo complicada, pero si funciona para usted, hágalo, pero tengo problemas para imaginar una situación en la que no podría simplemente modificar su proceso almacenado para use una subconsulta en lugar de una tabla temporal.