Normaal gesproken selecteren een resultaat van een scalaire functie zal niet veel pijn doen, maar filteren door het kan gemakkelijk honderden seconden kosten (hoewel niet noodzakelijk).
Als u moet filteren op het resultaat van een scalaire functie (WHERE col = dbo.scalar_function()
), helpt het vaak om in plaats daarvan een inline tabelwaardefunctie te maken. Het zou zijn waarde retourneren als de enige rij van de resultatentabel. Je doet dan inner join
met het functieresultaat, effectief filteren op de geretourneerde waarde. Dit werkt omdat SQL Server altijd inline tabelwaardige functies kan afwikkelen en inline in de aanroepende query kan opnemen.
Merk op dat deze truc niet werkt als de functie uit meerdere stappen bestaat. Deze kunnen niet worden afgewikkeld.