sql >> Databasteknik >  >> RDS >> Mysql

Filtrera en lagrad procedurs resultatuppsättning

Det finns ett par sätt att lösa detta. Det enklaste skulle vara att ändra den lagrade proceduren så att du kan filtrera resultatuppsättningen direkt, men jag antar att du av någon anledning inte kan göra detta.

Vad du då behöver göra är att lagra resultaten av den lagrade proceduren i en tabell/temp tabell så här:

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

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

EDIT:Om du kan redigera underfrågan:

Gammal lagrad proc:...SELECT*FROMMyTableWHERECol1 =@param1 ANDCol2 =@param2

Ny lagrad proc:

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

men jag kanske inte förstår din lagrade proc här helt. En temporär tabell här är inte riktigt den mest effektiva lösningen och kan vara något av ett krångel men om det fungerar för dig, gå med det, men jag har problem med att föreställa dig en situation där du inte bara kunde ändra din lagrade proc till använd en underfråga istället för en tillfällig tabell.




  1. Hur kan jag använda executemany för att infoga en lista över ordböcker i Python i MySQL

  2. Röstsystem som använder PHP+MySql?

  3. öka prestanda på en SELECT-fråga med stor 3D-punktdatauppsättning

  4. MariaDB USER() Förklarat