El @table
sintaxis crea una variable de tabla (una tabla real en tempdb
) y le materializa los resultados.
El WITH
la sintaxis define una Expresión de tabla común
que no se materializa y es solo una Vista en línea.
La mayoría de las veces sería mejor usar la segunda opción. Usted menciona que esto está dentro de una función. Si se trata de un TVF, la mayoría de las veces querrá que estén en línea en lugar de múltiples instrucciones para que el optimizador pueda expandirlas; esto rechazaría instantáneamente el uso de variables de tabla.
Sin embargo, a veces (digamos que la consulta subyacente es costosa y desea evitar que se ejecute varias veces) puede determinar que la materialización de los resultados intermedios mejora el rendimiento en algunos casos específicos. Hay actualmente de ninguna manera de forzar esto para CTE (sin forzar al menos una guía de plan )
En esa eventualidad usted (en general) tiene 3 opciones. Un @tablevariable
, #localtemp
tabla y un ##globaltemp
mesa. Sin embargo, solo se permite el uso del primero de ellos dentro de una función.
Para obtener más información sobre las diferencias entre las variables de tabla y las tablas #temp, ver aquí .