Está en la página 1de 12

Campos Calculados

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.

Creamos un campo calculado denominado "sueldototal" que suma al sueldo


básico de cada empleado la cantidad abonada por los hijos (100 por cada hijo):
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 se puede agregar un campo calculado a una tabla existente:


alter table NOMBRETABLA
add NOMBRECAMPOCALCULADO as EXPRESION;

alter table empleados


add sueldototal as sueldo+(cantidadhijos*100);

Los campos de los cuales depende el campo calculado no pueden eliminarse, se


debe eliminar primero el campo calculado.

Servidor de SQL Server instalado en forma local.

Ingresemos el siguiente lote de comandos en el SQL Server Management


Studio:
if object_id('empleados') is not null
drop table empleados;

create table empleados(


documento char(8),
nombre varchar(10),
domicilio varchar(30),
sueldobasico decimal(6,2),
hijos tinyint not null default 0,
sueldototal as sueldobasico + (hijos*100)
);

go

-- No puede ingresarse valor para el campo sueldototal:


insert into empleados values('22222222','Juan Perez','Colon 123',300,2);
insert into empleados values('23333333','Ana Lopez','Sucre 234',500,0);

select * from empleados;

-- Actualizamos un registro:
update empleados set hijos=1 where documento='23333333';

select * from empleados;

-- Agregamos un campo calculado:


alter table empleados
add salariofamiliar as hijos*100;

exec sp_columns empleados;

select * from empleados;

Tenemos como resultado:

Campos calculados

Primer problema:
Un comercio almacena los datos de los artículos para la venta en una tabla denominada
"articulos".
1- Elimine la tabla, si existe y créela nuevamente:
if object_id('articulos') is not null
drop table articulos;

create table articulos(


codigo int identity,
descripcion varchar(30),
precio decimal(5,2) not null,
cantidad smallint not null default 0,
montototal as precio *cantidad
);
El campo "montototal" es un campo calculado que multiplica el precio de cada artículo por la
cantidad disponible.
2- Intente ingresar un registro con valor para el campo calculado:
insert into articulos values('birome',1.5,100,150);
No lo permite.

3- Ingrese algunos registros:


insert into articulos values('birome',1.5,100);
insert into articulos values('cuaderno 12 hojas',4.8,150);
insert into articulos values('lapices x 12',5,200);

4- Recupere los registros:


select * from articulos;

5- Actualice un precio y recupere los registros:


update articulos set precio=2 where descripcion='birome';
select * from articulos;
el campo calculado "montototal" recalcula los valores para cada registro automáticamente.

6- Actualice una cantidad y vea el resultado:


update articulos set cantidad=200 where descripcion='birome';
select * from articulos;
el campo calculado "montototal" recalcula sus valores.

7- Intente actualizar un campo calculado:


update articulos set montototal=300 where descripcion='birome';
No lo permite.

if object_id('articulos') is not null


drop table articulos;

create table articulos(


codigo int identity,
descripcion varchar(30),
precio decimal(5,2) not null,
cantidad smallint not null default 0,
montototal as precio *cantidad
);

insert into articulos values('birome',1.5,100,150);

insert into articulos values('birome',1.5,100);


insert into articulos values('cuaderno 12 hojas',4.8,150);
insert into articulos values('lapices x 12',5,200);

select * from articulos;

update articulos set precio=2 where descripcion='birome';


select * from articulos;

update articulos set cantidad=200 where descripcion='birome';


select * from articulos;
update articulos set montototal=300 where descripcion='birome';
Arrays - Arreglos
Es un conjunto finito y ordenado de datos homogéneos.
Los arreglos pueden ser de una dimensión (vector),  dos dimensiones (matriz) y “n”
dimensiones (matriz multidimensional)

Sintáxis Vector

Problema 15
Implementar un vector para almacenar las notas del curso de matemática de 5 alumnos;
al final mostrar el promedio de esas notas.

V 0
0 14
1 15
2 13
3 11
4 16

Formulario:
Código del Botón ingresar
private void btnCargar_Click(object sender, EventArgs e)
        {
            //Declaración de variables
            int[] notas = new int[7];
            notas[0] = 14;

            notas[1] = 15;
            notas[2] = 13;
            notas[3] = 11;
            notas[4] = 16;
            notas[5] = 18;
            notas[6] = 19;

            int suma = 0;
            double promedio;

            //Proceso
            //Limpiar los datos del ComboBox
            cboNotas.Items.Clear();
            //Calcular la suma de todos los valores
            for(int i=0;i<=6;i++)
            {
                //Mostrando en el Combobox
                cboNotas.Items.Add(notas[i]);
                suma = suma + notas[i];
            }
            promedio = suma / 7;

            //Salida de Información
            txtPromedio.Text = Convert.ToString(promedio);

        }

Código del botón nuevo


private void btnNuevo_Click(object sender, EventArgs e)
        {
            cboNotas.Items.Clear();
            txtPromedio.Clear();
        }

Código del botón salir


private void btnSalir_Click(object sender, EventArgs e)
        {
            Close();
        }

Ejercicio

Problema 1:

Se desea guardar los sueldos de 5 operarios.


Según lo conocido deberíamos definir 5 variables si queremos tener en un cierto
momento los 5 sueldos almacenados en memoria.
Empleando un vector solo se requiere definir un único nombre y accedemos a cada
elemento por medio del subíndice , luego calcule el salario promedio de los 5
empleados.

Arrays (arreglos) Matrices Multidimensionales - Programación


en C#. Net con Visual Studio 2013 (19-25)
 IncanatoIt-ad  5 years ago  Curso Completo de CSharp .Net
En este artículo continuamos viendo las estructuras de datos, revisaremos ahora matrices
multidimensionales en el lenguaje de programación C#. Net, desarrollaremos un ejemplo
para entender mejor el uso de matrices multidimensionales utilizando el IDe Microsoft
Visual Studio 2013.

Pueden ver los videos directamente en youtube:


http://www.youtube.com/watch?
v=QTq6yQZzvlw&list=PLZPrWDz1Molqy8PjM4PnMPyZzJf5LH1M2&index=1

Visita nuestro canal en youtube donde publicamos cursos de Desarrollo de software y


aprende a diseñar sistemas informáticos totalmente gratis:
www.youtube.com/jcarlosad7

Arrays - Arreglos

Es un conjunto finito y ordenado de datos homogéneos.


Los arreglos pueden ser de una dimensión (vector),  dos dimensiones (matriz) y “n”
dimensiones (matriz multidimensional).
Sintáxis Matriz Multidimensional

Problema 17

Implementar una programa para registrar los datos de venta de un restaurant, se debe
almacenar en una matriz el nombre del plato, su precio, y la cantidad disponible.

El programa permitirá realizar búsquedas por el nombre del plato, si existe el plato
buscado nos mostrará su precio y la cantidad disponible para vender, el stock se debe de
actualizar por cada venta.

V 0 1 2
0 Arroz $5 10

1 Fideos $4 15

2 Gaseosa $2 20
3 Vino $50 5
Formulario:

Código del Formulario (Declaración de variables de ámbito de clase)


public FrmRestaurant()
        {
            InitializeComponent();
            btnVender.Enabled = false;
        }
        private string[,] mPlatos;
        private int cantPlatos;
        private int index;
        private int encuentra=0;

Código del botón Cargar


private void btnCargar_Click(object sender, EventArgs e)
        {
           
            //Entrada de Datos
           
                cantPlatos=Convert.ToInt32(txtCantPlatos.Text);
                //Inicializamos la matriz
                mPlatos = new string[cantPlatos, 3];

                //Ingresamos datos a la matriz con un inputBox


                //Para ingresar datos a la matriz
                for (int i = 0; i < cantPlatos;i++ )
                {
                    mPlatos[i, 0] =
Microsoft.VisualBasic.Interaction.InputBox("Ingrese Nombre del plato "+
(i+1),"Restaurant");
                    mPlatos[i, 1] =
Microsoft.VisualBasic.Interaction.InputBox("Ingrese Precio del plato " +(
i+1), "Restaurant");
                    mPlatos[i, 2] =
Microsoft.VisualBasic.Interaction.InputBox("Ingrese Cantidad disponible
del plato " + (i+1), "Restaurant");
                }
           
        }

Código del Botón Buscar

private void btnBuscar_Click(object sender, EventArgs e)
        {
            //Declaración de variables
            string plato;
            //Entrada de Datos
            plato = txtPlato.Text;
            //Filtramos el plato en la matriz

            for(int i=0;i<cantPlatos;i++)
            {
                if(mPlatos[i,0].Equals(plato))
                {
                    txtPrecio.Text = mPlatos[i, 1];
                    txtDisponible.Text = mPlatos[i, 2];
                    index = i;
                    btnVender.Enabled=true;
                    encuentra = 1;

                }  
            }
            if (encuentra == 0)
            {
                MessageBox.Show("No existe el
plato", "Restaurant", MessageBoxButtons.OK, MessageBoxIcon.Error);
                btnVender.Enabled = false;
            }

        }
Código del Botón Vender

private void btnVender_Click(object sender, EventArgs e)
        {
            //Declaración de variables
            int cant,stock;
            //Entrada de Datos
            cant = Convert.ToInt32(txtCant.Text);
            stock = Convert.ToInt32(txtDisponible.Text);

            if (cant<=stock)
            {
                //Disminuimos el stock de ese plato
                mPlatos[index, 2] = Convert.ToString(stock - cant);
            }
            else
            {
                MessageBox.Show("No hay Suficiente
Stock", "Restaurant", MessageBoxButtons.OKCancel, MessageBoxIcon.Informat
ion);
            }

        }

También podría gustarte