Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Filtern der Ergebnismenge einer gespeicherten Prozedur

Es gibt ein paar Möglichkeiten, dies zu lösen. Am einfachsten wäre es, die gespeicherte Prozedur so zu ändern, dass Sie die Ergebnismenge direkt filtern können, aber ich gehe davon aus, dass Sie dies aus irgendeinem Grund nicht tun können.

Was Sie dann tun müssen, ist, die Ergebnisse der gespeicherten Prozedur in einer Tabelle / temporären Tabelle wie folgt zu speichern:

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

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

BEARBEITEN:Wenn Sie die Unterabfrage bearbeiten können:

Alte gespeicherte Prozedur:...SELECT*FROMMyTableWHERECol1 =@param1 ANDCol2 =@param2

Neuer gespeicherter Prozess:

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

aber vielleicht verstehe ich Ihre gespeicherte Prozedur hier nicht vollständig. Eine temporäre Tabelle hier ist nicht wirklich die leistungsfähigste Lösung und kann etwas umständlich sein, aber wenn es für Sie funktioniert, dann machen Sie damit, aber ich habe Probleme, mir eine Situation vorzustellen, in der Sie Ihre gespeicherte Prozedur nicht einfach ändern könnten Verwenden Sie eine Unterabfrage anstelle einer temporären Tabelle.