En el entorno de bases de datos, table es un tipo de dato especial usado para almacenar un conjunto de resultados y procesarlo en otro momento. Las funciones y las variables se pueden declarar como de tipo table, siendo esta una estructura que se usa principalmente para almacenar temporalmente un conjunto de filas que se devuelven como el conjunto de resultados de una función con valores de tabla.
Características principales de las variables de tabla
Una variable table se comporta como una variable local y tiene un ámbito bien definido. Las variables de tabla están completamente aisladas del lote que las crea, por lo que no es necesario volver a resolverlas cuando se realiza una instrucción CREATE o ALTER, lo que podría suceder con una tabla temporal. Dentro de su ámbito, la variable table se puede usar como una tabla normal y puede aplicarse en cualquier lugar donde se utilice una tabla o expresión de tabla en las sentencias SELECT, INSERT, UPDATE y DELETE.
Declaración y estructura
La declaración de tabla incluye definiciones de columna, nombres, tipos de datos y restricciones. El mismo subconjunto de información que se usa para definir una tabla en CREATE TABLE es aplicable aquí. Los únicos tipos de restricción permitidos son PRIMARY KEY, UNIQUE, NULL y CHECK.
- Intercalación: Si no se especifica collation_definition, la columna hereda la intercalación de la base de datos actual.
- Columnas calculadas: Se puede definir una columna mediante una expresión, como cost AS price * qty.
- Identidad: Se puede utilizar la propiedad IDENTITY para que SQL Server proporcione un valor incremental único.
Consideraciones de rendimiento y optimización
Es vital comprender cómo el optimizador trata estas variables para garantizar un rendimiento óptimo:
- Estadísticas: Las variables table no tienen estadísticas de distribución. En muchos casos, el optimizador compilará un plan de consulta sobre el supuesto de que la variable de tabla no tiene filas (o tiene una sola).
- Precaución: Debido a la falta de estadísticas, las variables table deben usarse con precaución si se espera una gran cantidad de filas (más de 100). En estos casos, las tablas temporales pueden representar una mejor solución.
- Paralelismo: Las consultas que modifican variables table no generan planes de ejecución de consultas en paralelo.
- Compilación diferida: El nivel de compatibilidad de la base de datos 150 (y a partir de SQL Server 2019) mejora el rendimiento con la introducción de la compilación diferida, que propaga estimaciones de cardinalidad más precisas.
Comparativa de uso: Variables de Tabla vs. Tablas Temporales
Para determinar cuándo es conveniente elegir una u otra estructura, considere la siguiente comparativa basada en el comportamiento del sistema:
Lea también: Pagar Impuestos de Moto
| Característica | Variable de Tabla | Tabla Temporal |
|---|---|---|
| Estadísticas | No disponibles | Disponibles |
| Uso recomendado | Volúmenes pequeños | Volúmenes grandes |
| Compilaciones | No desencadenan recompilaciones | Pueden desencadenarlas |
Limitaciones importantes
Existen restricciones clave que todo desarrollador debe conocer:
- Una variable de tabla no se puede usar como destino de la cláusula INTO en una sentencia SELECT.
- No puede usar la instrucción EXEC ni el procedimiento almacenado sp_executesql para ejecutar una consulta dinámica que haga referencia a una variable de tabla creada fuera de ese ámbito.
- Las variables de tabla se crean en la base de datos tempdb; aunque el nombre sugiere "tabla", no es una estructura de solo memoria, ya que debe tener un lugar en el disco para almacenar datos si exceden la capacidad de memoria.
- A partir de SQL Server 2014, se introdujo una sintaxis nueva que permite crear índices alineados como parte de la definición de tabla, mejorando las capacidades frente a versiones anteriores donde no se podían crear índices explícitamente.
Lea también: Guía de impuestos para empresas
Lea también: Guía sobre ISR Retenido
