Suma de dos columnas en una tabla SQL

My assignment is that i have Three columns Stock_Opening,Stock_New,Stock_Available apart from P_Key and F_key.I have to insert some value in Stock_New. Then Stock_Opening + Stock_New will add up and value will go into Stock_Available

Problema: cuando inserto un valor en Stock_New y lo ejecuto, solo actualice Stock_New si vuelvo a ejecutar la misma consulta, ahora actualice ambas tablas Stock_New con actual  valor y Stock_Available con valor anterior. Quiero que Stock_New y Stock_Available se actualicen simultáneamente Bellow es la consulta que estoy ejecutando

UPDATE Stock
SET Stock_New = Stock_New + '2',
    Stock_Available = Stock_Opening + Stock_New
WHERE Med_ID = 'PANAD223'

Abajo son capturas de pantalla linealmente

This is the table before execution

This is the table after first execution

This is the table after second execution

0
En lugar de capturas de pantalla, publique su código como texto .
agregado el autor Larnu, fuente

7 Respuestas

Por lo que veo, las columnas computadas encajan mejor en su caso.

Las columnas calculadas en realidad son columnas virtuales que no son físicamente   almacenado en la tabla a menos que la columna esté marcada como PERSISTADO. Valores para   las columnas calculadas se recalculan cada vez que se referencian en una   consulta

see https://www.c-sharpcorner.com/article/computed-columns-in-sql-server/

1
agregado

Stock_New is updated with latest value after update is finished. Try:

UPDATE Stock SET Stock_New = Stock_New + 2 , Stock_Available = Stock_Opening + Stock_New+2 WHERE Med_ID='PANAD223'
0
agregado

Si hace referencia a una columna en un UPDATE , obtendrá el valor antes del UPDATE . Entonces, Stock_New siempre tiene dos cortos en Stock_Available = Stock_Opening + Stock_New . Debe agregar el 2 allí también.

UPDATE stock
       SET stock_new = stock_new + 2,
           stock_available = stock_opening + stock_new + 2
       WHERE med_id = 'PANAD223';

Además, si tiene números literales, no los incluya entre comillas simples. Eso es por cuerdas.

0
agregado
create proc sampleupdate
as
begin
declare @stocknew int,
declare @stockopening int 

set @stocknew=(select Stock_New from Stock (condition))
set @stockopening=(select Stock_Opening  from Stock (condition))

set @[email protected] +'2'
UPDATE Stock SET Stock_New [email protected], Stock_Available = @stockopening + @sn WHERE 
Med_ID='PANAD223'
end
0
agregado
mejor ir para el procedimiento almacenado, el tipo de datos puede variar
agregado el autor Anjan, fuente

Por favor, intente actualizar como a continuación:

UPDATE Stock SET Stock_New = Stock_New + '2', Stock_Available = Stock_Opening + Stock_New + '2' WHERE Med_ID='PANAD223'
0
agregado

Puede tener stock_available = stock_opening + stock_new + 2 ya que SQL cuenta el primer valor, no el actualizado.

Una forma más fácil de hacerlo es crear la columna Stock_Available tal como se calcula a partir de las otras dos columnas:

ALTER TABLE Stock
DROP COLUMN Stock_Available

ALTER TABLE Stock
ADD Stock_Available AS Stock_New + Stock_Opening

Ahora solo tienes que hacer una actualización:

UPDATE Stock Set Stock_New = Stock_New + 2 WHERE Med_ID='PANAD223'

y Stock_Available se actualizará automáticamente

0
agregado

cuando actualice los datos 1, Stock_New = 28, Stock_Opening = 20

UPDATE Stock SET Stock_New = 28 + '2', 
                 Stock_Available = 20 + 28
 WHERE Med_ID='PANAD223'

cuando actualice los datos 2, Stock_New = 30, Stock_Opening = 20

UPDATE Stock SET Stock_New = 28 + '2', 
                 Stock_Available = 20 + 30
 WHERE Med_ID='PANAD223'

Entonces usted agrega (+ '2') a

UPDATE Stock SET Stock_New = Stock_New + '2', 
                 Stock_Available = Stock_Opening + Stock_New + '2'
 WHERE Med_ID='PANAD223'
0
agregado