Normalmente, selezionando un risultato di una funzione scalare non farà molto male, ma filtraggio da esso può facilmente costare centinaia di secondi (non necessariamente però).
Se è necessario filtrare in base al risultato di una funzione scalare (WHERE col = dbo.scalar_function()
), spesso aiuta invece a creare una funzione inline con valori di tabella. Restituirebbe il suo valore come unica riga della tabella dei risultati. Quindi faresti inner join
con il risultato della funzione, filtrando efficacemente in base al valore restituito. Funziona perché SQL Server è sempre in grado di svolgere funzioni con valori di tabella inline e integrarle nella query chiamante.
Nota che questo trucco non funzionerà se la funzione è a più passaggi. Questi non possono essere srotolati.