none
Multiplicar columnas en un insert RRS feed

  • Pregunta

  • Amigos buenas noches , quiero hacerles una consulta , es posible hacer procesos aritméticos en un insert , debo hacer una multiplicación entre dos columnas yo estaba realizando este proceso con update pero cuando ingresó muchos ítem el proceso se demora mucho, espero me puedan ayudar 

    Daniel

    jueves, 20 de agosto de 2020 1:59

Todas las respuestas

  • Hola Dannycv012:

    es posible hacer procesos aritméticos en un insert

    Si es posible.

    DROP TABLE R;
    Create table R (id int, col1 int, col2 int, calculada as (col1 + col2)*1.0 /100)
    go
    Insert into R (id, col1, col2)
    values (1,10,10);
    GO
    ALTER TABLE R 
    ADD Persistida As  ((col1 + col2)*1.0 /100) persisted;
    go
    Select * from R;
    DROP TABLE R;

    Las columnas calculadas, se realizan al vuelo por el motor cuando consultas datos.

    Las columnas de tipo persisted, se almacenan como un dato más en la propia tabla.

    Para otro escenario, tienes que detallar más lo que tienes y lo que quieres.

    Sql server columnas calculadas

    https://docs.microsoft.com/es-es/sql/relational-databases/tables/specify-computed-columns-in-a-table?view=sql-server-ver15

    jueves, 20 de agosto de 2020 3:31
  • Javier disculpa , es que en mi tabla tengo dos columnas una precio y otra cantidad debo hacer la operación entre  estas dos y que el resultado cargue en la columna totalitem en esas misma tabla.

    Daniel

    jueves, 20 de agosto de 2020 3:35
  • Hola Daniel:

    DROP TABLE R;
    Create table R (id int, precio float, cantidad int)
    go
    Insert into R (id, precio, cantidad)
    values
    (1,100.25,23),
    (2,870.33,10),
    (3,1426.0,12);
    go
    --Solución aplicar una columna persistida.
    ALTER TABLE R 
    ADD total As  (Precio*Cantidad) persisted;
    go
    
    Select * from R;
    

    Si aplicas una columna persistida a una tabla que tiene datos, ella misma realizará los cálculos sobre los registros que existen y directamente ya puedes observar lo que hay.

    Cuando insertes una nueva fila, no tienes que mencionarla, porque esto se realiza de un modo transparente.

    Insert into R(id, precio, cantidad)
    values
    (4,100,1); -- inserción simple
    go
    Insert into R(id, precio, cantidad)
    values
    (5,100,1),
    (6,200,10); -- inserción múltiple
    go
    Select * from R;

    otra opción es aplicar una columna con una función.

    Create function dbo.calculoTotal (@precio float, @cantidad int)
    returns float
    begin
    	return (Select @precio * @cantidad);
    end

    La función dbo.calculoTotal, recibe dos parámetros de entrada y retorna la multiplicación de los dos parámetros.

    Añadimos una columna a la tabla que se alimenta del retorno de la función sobre las columnas precio y cantidad.

    Alter table R
    add TotalOpcion2  as dbo.calculoTotal(precio,cantidad);
    GO
    SELECT * FROM r

    jueves, 20 de agosto de 2020 3:53