Una columna calculada es una columna cuyo valor no se introduce, sino que se obtiene como resultado de un cálculo.
< definicion_columna > ::=
nbCol AS expresion
[ PERSISTED
[NOT NULL]
[ <restriccion_columna> [...n ] ]
]
expresion es la expresión que define el valor de una columna calculada y está basada en otras columnas de la tabla.
Por ejemplo, una columna calculada puede ser definida así:
importe AS precio * cantidad
La expresión puede ser un nombre de columna no calculada, una constante, una función, una variable o cualquier combinación de estos elementos conectados mediante uno o más operadores. La expresión no puede ser una subconsulta ni contener tipos de datos de alias.
Una columna calculada es, por defecto, una columna virtual no almacenada físicamente en la tabla. PERSISTED indica que la columna calculada se almacena en la tabla y automáticamente se actualizan los valores almacenados en ella cuando se actualizan las columnas de las que depende.
Para que la columna pueda ser definida con PERSISTED la expresión que la calcula debe ser determinista. Una expresión es determinista a menos que utilice una función no determinista.
Una columna calculada se puede utilizar en la lista de selección, cláusula WHERE, cláusula ORDER BY u otras ubicaciones en que se puedan utilizar expresiones regulares, con las siguientes excepciones:
Una tabla temporal es una tabla creada por un determinado proceso y desaparece cuando termina éste.
Se pueden crear tablas temporales locales y globales. Las tablas temporales locales son visibles sólo en la sesión actual y las tablas temporales globales son visibles para todas las sesiones.
Para indicar que la tabla que queremos crear es temporal añadimos a su nombre el prefijo # (#nbTabla) para tablas temporales locales y el prefijo ## (##nbTabla) tablas temporales globales.
Por ejemplo:
CREATE TABLE #trabajo (col1 INT PRIMARY KEY);
Esta instrucción crea una tabla temporal local llamada trabajo con una sola columna.
Las tablas temporales funcionan casi como las tablas normales con algunas diferencias.
No se pueden crear particiones en las tablas temporales.
nbTabla no puede tener más de 116 caracteres. Esto se debe a que si se crea una tabla temporal local en un procedimiento almacenado o una aplicación que varios usuarios pueden ejecutar al mismo tiempo, el Motor de base de datos tiene que ser capaz de distinguir las tablas creadas por los distintos usuarios, lo consigue añadiendo internamente un sufijo numérico a cada nombre de tabla temporal local. El nombre completo de una tabla temporal tal como se almacena en la tabla sysobjects de tempdb consta del nombre de la tabla especificado en la instrucción CREATE TABLE y el sufijo numérico generado por el sistema.
Las tablas temporales se quitan automáticamente cuando están fuera de ámbito, a menos que ya se hayan quitado explícitamente mediante DROP TABLE:
Una tabla temporal local creada en un procedimiento almacenado se quita automáticamente cuando se completa el procedimiento almacenado. Cualquiera de los procedimientos almacenados anidados ejecutados por el procedimiento almacenado que creó la tabla, puede hacer referencia a la tabla. El proceso que llamó al procedimiento almacenado que creó la tabla no puede hacer referencia a la tabla.
Las tablas temporales se quitan automáticamente al final de la sesión actual.
Las tablas temporales globales se quitan automáticamente cuando la sesión que creó la tabla finaliza y las tareas restantes han dejado de hacer referencia a ellas. La asociación entre una tarea y una tabla se mantiene sólo durante la vida de una única instrucción Transact-SQL. Esto significa que la tabla temporal global se quita al finalizar la última instrucción Transact-SQL que estuviera haciendo referencia activamente a la tabla cuando finalizó la sesión que la creó.
Una tabla temporal local creada en un procedimiento almacenado o desencadenador, puede tener el mismo nombre que una tabla temporal creada antes de que se llame al procedimiento almacenado o al desencadenador. No obstante, si una consulta hace referencia a una tabla temporal y hay dos tablas temporales con el mismo nombre, no está definido en cuál de las dos tablas debe resolverse la consulta. Los procedimientos almacenados anidados pueden crear también tablas temporales con el mismo nombre que la tabla temporal creada por el procedimiento almacenado que la llamó. Sin embargo, en el caso de las modificaciones que se van a resolver en la tabla creada en el procedimiento anidado, la tabla debe tener la misma estructura, con los mismos nombres de columnas, que la tabla creada en el procedimiento que realiza la llamada. Esto se muestra en el ejemplo siguiente.
Con tablas temporales globales o locales, la sintaxis CREATE TABLE admite la definición de restricciones, excepto las restricciones FOREIGN KEY. Si se especifica una restricción FOREIGN KEY en una tabla temporal, la instrucción devuelve un mensaje de advertencia que indica que la restricción se ha omitido. La tabla se crea sin las restricciones FOREIGN KEY. En las restricciones FOREIGN KEY no se puede hacer referencia a tablas temporales.
Se recomienda utilizar variables de tabla en lugar de tablas temporales. Las tablas temporales son útiles cuando es necesario crear en ellas índices de forma explícita o bien cuando los valores de tabla deben ser visibles en varios procedimientos almacenados o funciones. En general, las variables de tabla contribuyen a que el procesamiento de las consultas sea más eficaz.
Síguenos en: Facebook Sobre aulaClic Política de Cookies
© aulaClic. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.