sql server - una - Función de valor de tabla(TVF) vs. Vista
tipos de funciones en sql server (2)
¿Cuál es la diferencia entre las funciones con valores de tabla y las vistas? ¿Hay algo que puedas hacer con 1 que sea difícil o imposible de hacer con el otro? ¿O la diferencia radica en la eficiencia?
Descubrí que las uniones con TVF MultiStatement funcionan mucho mejor que las Vistas cuando se especifica una PK en la tabla de retorno de la función.
CREATE FUNCTION [FORMREQS].[fnGetFormsStatus] ()
RETURNS
/* Create a PK using two of the columns */
@Indexed TABLE (
[OrgID] [char](8) NOT NULL,
[PkgID] [int] NOT NULL,
[FormID] varchar(5) NOT NULL,
PRIMARY KEY CLUSTERED(OrgID, PkgID)
)
AS
BEGIN
INSERT @Indexed SELECT OrgID, PkgID, FormID FROM FormsTable
RETURN
END
Un TVF en línea sin parámetros y una Vista no materializada son muy similares. Algunas de las diferencias funcionales que se me ocurren son las siguientes.
Puntos de vista
Accepts Parameters - No
Expanded out by Optimiser - Yes
Can be Materialized in advance - Yes (through indexed views)
Is Updatable - Yes
Can contain Multiple Statements - No
Can have triggers - Yes
Can use side-effecting operator - Yes
TVF en línea
Accepts Parameters - Yes
Expanded out by Optimiser - Yes
Can be Materialized in advance - No
Is Updatable - Yes
Can contain Multiple Statements - No
Can have triggers - No
Can use side-effecting operator - No
MultiStatement TVFs
Accepts Parameters - Yes
Expanded out by Optimiser - No
Can be Materialized in advance - No
Is Updatable - No
Can contain Multiple Statements - Yes
Can have triggers - No
Can use side-effecting operator - No
En el tiempo de ejecución, las vistas y los TVF en línea están en línea y se tratan de manera similar a las tablas derivadas o CTE. Es posible que no se evalúen en su totalidad (o incluso en algunos casos) o que se evalúen varias veces en otros . Los TVF de varias instancias siempre se evaluarán y almacenarán en el tipo de tabla de retorno (básicamente una variable de tabla)