Normálně vybírám výsledek skalární funkce moc neublíží, ale filtrování může snadno stát stovky sekund (ne však nutně).
Pokud potřebujete filtrovat podle výsledku skalární funkce (WHERE col = dbo.scalar_function()
), často pomůže vytvořit místo toho funkci s inline tabulkou. Vrátí svou hodnotu jako jediný řádek výsledné tabulky. Potom byste provedli inner join
s výsledkem funkce, efektivně filtrovat podle vrácené hodnoty. To funguje, protože SQL Server je vždy schopen rozvinout vložené funkce s hodnotou tabulky a vložit je do volajícího dotazu.
Všimněte si, že tento trik nebude fungovat, pokud je funkce vícekroková. Tyto nelze odvinout.