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

SQL Server:funciones con valores de tabla frente a procedimientos almacenados

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

Un TVF de varios extractos tiene un plan (encontrará una referencia).

Los TVF son útiles cuando desea variar la lista SELECT para una entrada parametrizada. Los TVF en línea se expanden y el optimizador considerará la selección externa/dónde. Para TVF de varias instrucciones, la optimización no es realmente posible porque debe ejecutarse hasta el final, entonces filtro.

Personalmente, usaría un proceso almacenado en lugar de un TVF de varias declaraciones. Son más flexibles (p. ej., sugerencias, pueden cambiar de estado, CONFIGURAR SIN CUENTA, CONFIGURAR XACTABORT, etc.).

No tengo ninguna objeción a los TVF en línea, pero no suelo usarlos para el código de cara al cliente debido a la incapacidad de usar SET y cambiar de estado.