miércoles, 14 de agosto de 2019

Campo calculado o columna calculada

Un campo calculado es un campo que no se almacena físicamente en la tabla. SQL Server emplea una fórmula que detalla el usuario al definir dicho campo para calcular el valor según otros campos de la misma tabla.
Un campo calculado no puede:
- definirse como "not null".
- ser una subconsulta.
- tener restricción "default" o "foreign key".
- insertarse ni actualizarse.

Puede ser empleado como llave de un índice o parte de restricciones "primary key" o "unique" si la expresión que la define no cambia en cada consulta.

 create table empleados(
  documento char(8),
  nombre varchar(10),
  domicilio varchar(30),
  sueldobasico decimal(6,2),
  cantidadhijos tinyint default 0,
  sueldototal as sueldobasico + (cantidadhijos*100)
 );

También puede ser una columna que llame a una función, pero esta debe ser determinista.
Muchas funciones dan que es no determinista, para ello se puede utilizar una palabra reservada en la definición de la función, WITH SCHEMABINDING.


Create FUNCTION [dbo].[fn_xxxxx]

(
    @String VARCHAR(32),
    @MatchExpression VARCHAR(32)

)

RETURNS VARCHAR(32)
WITH SCHEMABINDING
AS
...


Luego en la definición de la tabla

alter table tablaxxx add [campoCalculado] as dbo.fn_xxxxx( 'dato' , '^0-9');


También a esa columna se le puede crear un índice y hacer que las consultas sean óptimas. En ese caso hay que agregar la palabra reservada PERSISTED en la columna.

alter table tablaxxx add [campoCalculado] as dbo.fn_xxxxx( 'dato' , '^0-9') PERSISTED;

Luego de ello se puede crear el índice:

create index idx_campoCalculado on tablaxxx (campoCalculado);

No hay comentarios: