Zkuste vytvořit funkci s inline tabulkou. Příklad:
CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
RETURNS TABLE
AS
RETURN
(
SELECT Field1, Field2
FROM SomeTable
WHERE Field3 = @Parameter1
)
-- Then call like this, just as if it's a table/view just with a parameter
SELECT * FROM dbo.fxnExample(1)
Pokud si prohlédnete plán provádění pro SELECT, neuvidíte vůbec zmínku o funkci a ve skutečnosti vám ukáže pouze dotazované základní tabulky. To je dobré, protože to znamená, že při generování plánu provádění pro dotaz budou použity statistiky základních tabulek.
To, čemu je třeba se vyhnout, by byla funkce oceňovaná tabulkou s více příkazy, protože základní statistiky tabulky nebudou použity a mohou mít za následek špatný výkon kvůli špatnému plánu provádění.
Příklad toho, co vyvarovat :
CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
RETURNS @Results TABLE(Field1 VARCHAR(10), Field2 VARCHAR(10))
AS
BEGIN
INSERT @Results
SELECT Field1, Field2
FROM SomeTable
WHERE Field3 = @Parameter1
RETURN
END
Jemně odlišné, ale s potenciálně velkými rozdíly ve výkonu, když je funkce použita v dotazu.