sql >> Base de Datos >  >> RDS >> Sqlserver

Crear VISTA parametrizada en SQL Server 2008

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.