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

Filtrering af en lagret procedures resultatsæt

Der er et par måder at løse dette på. Det nemmeste ville være at ændre den lagrede procedure, så du kan filtrere resultatsættet direkte, men jeg går ud fra, at du af en eller anden grund ikke er i stand til at gøre dette.

Det, du derefter skal gøre, er at gemme resultaterne af den lagrede procedure i en tabel / midlertidig tabel som sådan:

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

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

EDIT:Hvis du kan redigere underforespørgslen:

Gammel lagret proc:...SELECT*FROMMyTableWHERECol1 =@param1 ANDCol2 =@param2

Ny lagret proc:

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

men måske forstår jeg ikke helt din gemte proc her. Et midlertidigt bord her er ikke rigtig den mest effektive løsning og kan være noget besværligt, men hvis det virker for dig, så gå med det, men jeg har problemer med at forestille mig en situation, hvor du ikke bare kunne ændre din lagrede proc til brug en underforespørgsel i stedet for en midlertidig tabel.




  1. Omdøb en tabel i SQL Server (T-SQL)

  2. Forenkle brugerkontostyring med MariaDB MaxScale 2.2 og MariaDB Server 10.3

  3. Sådan indlæses data i tekstboks fra sql-databasetabel

  4. Hvordan sammenkædes kolonner med Laravel 4 Eloquent?