Spróbuj utworzyć wbudowaną funkcję z wartością przechowywaną w tabeli. Przykład:
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)
Jeśli przejrzysz plan wykonania dla SELECT, w ogóle nie zobaczysz wzmianki o funkcji, a w rzeczywistości pokażesz tylko tabele bazowe, których dotyczy zapytanie. Jest to dobre, ponieważ oznacza to, że podczas generowania planu wykonania zapytania zostaną użyte statystyki dotyczące tabel bazowych.
Należy unikać funkcji z wartościami tabelowymi zawierającymi wiele instrukcji, ponieważ podstawowe statystyki tabeli nie będą używane i mogą skutkować niską wydajnością z powodu złego planu wykonania.
Przykład tego, czego unikać :
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
Nieco inny, ale z potencjalnie dużymi różnicami w wydajności, gdy funkcja jest używana w zapytaniu.