Intente crear una función con valores de tabla en línea. Ejemplo:
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)
Si ve el plan de ejecución para SELECT, no verá ninguna mención de la función y en realidad solo le mostrará las tablas subyacentes que se consultan. Esto es bueno porque significa que se utilizarán las estadísticas de las tablas subyacentes al generar un plan de ejecución para la consulta.
Lo que se debe evitar sería una función con valores de tabla de varias declaraciones, ya que las estadísticas de la tabla subyacente no se utilizarán y pueden dar como resultado un rendimiento deficiente debido a un plan de ejecución deficiente.
Ejemplo de lo que evitar :
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
Sutilmente diferente, pero con diferencias potencialmente grandes en el rendimiento cuando la función se usa en una consulta.