valores una tipos tipo tabla procedimientos procedimiento permisos parametros linea funciones dar crear con array almacenados almacenado sql-server function stored-procedures sql-execution-plan

sql-server - una - procedimiento almacenado sql server select



SQL Server: Funciones con valores de tabla frente a procedimientos almacenados (2)

He estado leyendo mucho sobre los planes de ejecución y los problemas de los parámetros almacenados en los procedimientos almacenados. Conozco las soluciones sugeridas para esto.

Mi pregunta, sin embargo, es que todo lo que he leído indica que SQL Server almacena en caché el plan de ejecución para los procedimientos almacenados. No se menciona las funciones de valor de tabla. Supongo que lo hace para Views (sin interés).

¿Se vuelve a compilar cada vez que se llama a una función de valor de tabla?

¿Cuándo es mejor utilizar una función de valor de tabla en lugar de un procedimiento almacenado?


No he verificado esto, pero doy por sentado que el plan de ejecución de las funciones también está en la memoria caché. No puedo ver una razón por la que eso no sería posible.

Sin embargo, el plan de ejecución para las vistas no está en la memoria caché. La consulta en la vista formará parte de la consulta que utiliza la vista, por lo que el plan de ejecución se puede almacenar en caché para la consulta que usa la vista, pero no para la vista en sí.

El uso de funciones versus procedimientos almacenados depende del resultado que necesite de él. Una función con valores de tabla puede devolver un único resultado, mientras que un procedimiento almacenado puede devolver un resultado, muchos resultados o ningún resultado.


Una función de tabla en línea (TVF) es como una macro: se expande a la consulta externa. No tiene un plan como tal: la llamada SQL tiene un plan.

Un TVF multi-declaración tiene un plan (encontrará una referencia).

Los TVF son útiles cuando se quiere variar la lista SELECT para una entrada con parámetros. Los TVF en línea se expanden y el optimizador seleccionará / seleccionará el exterior. En el caso de las TVF de varias sentencias, la optimización no es realmente posible porque debe ejecutarse hasta su finalización, luego filtrar.

Personalmente, utilizaría un proceso almacenado en un TVF de varias frases. Son más flexibles (por ejemplo, sugerencias, pueden cambiar de estado, CONFIGURAR NOCOUNT ON, SET XACTABORT, etc.).

No me opongo a los TVF en línea, pero no los utilizo para el código del cliente debido a la imposibilidad de usar SET y cambiar el estado.