valores una tipos tabla parametros para orden opcionales línea linea las instrucciones función funciones funcion escalares cual create crear correcto con sql-server sql-view sql-function

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)

Ocasionalmente, la capacidad de parametrizar TVF en línea directamente puede conducir a un mejor plan de ejecución que la consulta parametrizada equivalente frente a una vista.