sql >> Database >  >> RDS >> Mysql

De resultatenset van een opgeslagen procedure filteren

Er zijn een aantal manieren om dit op te lossen. Het gemakkelijkst zou zijn om de opgeslagen procedure aan te passen zodat u de resultatenset rechtstreeks kunt filteren, maar ik neem aan dat u dit om de een of andere reden niet kunt doen.

Wat u dan moet doen, is de resultaten van de opgeslagen procedure opslaan in een tabel / tijdelijke tabel, zoals:

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

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

BEWERKEN:Als u de subquery kunt bewerken:

Oud opgeslagen proces:...SELECT*FROMMyTableWHERECol1 =@param1 ANDCol2 =@param2

Nieuw opgeslagen proces:

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

maar misschien begrijp ik je opgeslagen proces hier niet helemaal. Een tijdelijke tabel is hier niet echt de meest performante oplossing en kan wat gedoe zijn, maar als het voor jou werkt, ga er dan mee akkoord, maar ik heb problemen om me een situatie voor te stellen waarin je niet zomaar je opgeslagen proc naar gebruik een subquery in plaats van een tijdelijke tabel.




  1. Selecteer rijen met maximale kolomwaarde groep op een andere kolom

  2. Room API - Hoe de recent ingevoegde gegenereerde id van de entiteit op te halen?

  3. Mysql:HERNAME TABEL INDIEN BESTAAT

  4. Hoe een geneste tabel te maken met behulp van door de gebruiker gedefinieerd gegevenstype in Oracle Database