Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Filtrando o conjunto de resultados de um procedimento armazenado


Existem algumas maneiras de resolver isso. O mais fácil seria modificar o procedimento armazenado para permitir que você filtre o conjunto de resultados diretamente, mas suponho que, por algum motivo, você não consiga fazer isso.

O que você precisará fazer é armazenar os resultados do procedimento armazenado em uma tabela/tabela temporária assim:
DECLARE @tablevar table(col1,..
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'

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

EDIT:Se você pode editar a subconsulta:

Old Stored Proc:...SELECT*FROMMyTableWHERECol1 =@param1 ANDCol2 =@param2

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

mas talvez eu não esteja entendendo seu proc armazenado aqui completamente. Uma tabela temporária aqui não é realmente a solução com melhor desempenho e pode ser um pouco trabalhosa, mas se funcionar para você, vá em frente, mas estou tendo problemas para visualizar uma situação em que você não poderia simplesmente modificar seu procedimento armazenado para use uma subconsulta em vez de uma tabela temporária.