Normalt väljar ett resultat av en skalär funktion kommer inte att skada mycket, men filtrering genom att det lätt kan kosta hundratals sekunder (inte nödvändigtvis dock).
Om du behöver filtrera efter ett skalärt funktionsresultat (WHERE col = dbo.scalar_function()
), hjälper det ofta att göra en inline-tabellvärderad funktion istället. Det skulle returnera sitt värde som den enda raden i resultattabellen. Du skulle då göra inner join
med funktionsresultatet, filtrerar effektivt efter det returnerade värdet. Detta fungerar eftersom SQL Server alltid kan avveckla inline-tabellvärderade funktioner och infoga dem i den anropande frågan.
Observera att det här tricket inte fungerar om funktionen är en flerstegsfunktion. Dessa kan inte lindas upp.