Опитайте да създадете вградена функция със стойност на таблица. Пример:
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)
Ако прегледате плана за изпълнение на SELECT, изобщо няма да видите споменаване на функцията и всъщност просто ще ви покаже основните таблици, за които се изисква запитване. Това е добре, тъй като означава, че статистическите данни за основните таблици ще бъдат използвани при генериране на план за изпълнение на заявката.
Нещото, което трябва да избягвате, би била функцията, оценявана в таблица с множество изрази, тъй като основната статистика на таблицата няма да се използва и може да доведе до лоша производителност поради лош план за изпълнение.
Пример за това, което да избягвате :
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
Незначително различно, но с потенциално големи разлики в производителността, когато функцията се използва в заявка.