Normalt vælger et resultat af en skalarfunktion vil ikke skade meget, men filtrering ved at det nemt kan koste hundredvis af sekunder (dog ikke nødvendigvis).
Hvis du har brug for at filtrere efter et skalarfunktionsresultat (WHERE col = dbo.scalar_function()
), hjælper det ofte at lave en inline-tabelvurderet funktion i stedet for. Det ville returnere sin værdi som den eneste række i resultattabellen. Du ville derefter gøre inner join
med funktionsresultatet, der effektivt filtreres efter den returnerede værdi. Dette virker, fordi SQL Server altid er i stand til at afvikle inline-tabelværdierede funktioner og inline dem i den kaldende forespørgsel.
Bemærk, at dette trick ikke virker, hvis funktionen er i flere trin. Disse kan ikke afvikles.