Mysql
 sql >> Base de données >  >> RDS >> Mysql

Filtrage du jeu de résultats d'une procédure stockée

Il existe plusieurs façons de résoudre ce problème. Le plus simple serait de modifier la procédure stockée pour vous permettre de filtrer directement le jeu de résultats, mais je suppose que, pour une raison quelconque, vous ne pouvez pas le faire.

Ce que vous devrez faire ensuite, c'est stocker les résultats de la procédure stockée dans une table / table temporaire comme ceci :

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

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

EDIT :si vous pouvez modifier la sous-requête :

Ancienne procédure stockée :...SELECT*FROMMyTableWHERECol1 =@param1 ANDCol2 =@param2

Nouvelle procédure stockée :

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

mais peut-être que je ne comprends pas complètement votre proc stocké ici. Une table temporaire ici n'est pas vraiment la solution la plus performante et peut être un peu compliquée, mais si cela fonctionne pour vous, allez-y, mais j'ai du mal à imaginer une situation où vous ne pourriez pas simplement modifier votre proc stocké pour utiliser une sous-requête au lieu d'une table temporaire.