2015-01-06 2 views
0

У меня есть таблица INVENTORYSQL триггера расчет между таблицей столбца

Create table INVENTORY(){ 
     INVENID int indentity,  -- inventory ID 
     PRODUCTID varchar(10), --product id 
     QUANTUM int,  -- quantum 
     QUANTUMINPUT int, -- quantum input 
     QUANTUMOUTPUT int, -- quantum output 
} 

я создал триггер:

Create trigger trig_cal 
on INVENTORY 
after insert,update 
as 
if(UPDATE(QUANTUMINPUT)) 
begin 
UPDATE INVENTORY set QUANTUM = QUANTUM + QUANTUMINPUT 
end 
else if(UPDATE(QUANTUMOUTPUT)) 
begin 
UPDATE INVENTORY set QUANTUM = QUANTUM - QUANTUMOUTPUT 
end 

Я попытался вставить Insert into INVENTORY(PRODUCTID,QUANTUM) values('P01',100) затем UPDATE INVENTORY set QUANTUMOUTPUT = 1 where PRODUCTID = 'P01' он вернется QUANTUM = 90. Это неправильно однако, когда я обновляю QUANTUMOUTPUT или QUANTUMINPUT, расчет неправильно

+0

Каков ваш ожидаемый результат. Пожалуйста, поместите некоторые данные образца. – StackUser

+0

благодарит за вашу помощь! –

+0

Я сделал несколько изменений, пожалуйста, проверьте новый код. – StackUser

ответ

0

Попробуйте с этим спускового кодом

CREATE TABLE INVENTORY 
    (
    INVENID  INT,-- inventory ID 
    PRODUCTID  VARCHAR(10),--product id 
    QUANTUM  INT,-- quantum 
    QUANTUMINPUT INT,-- quantum input 
    QUANTUMOUTPUT INT, -- quantum output 
) 

ALTER TRIGGER trig_cal 
ON INVENTORY 
after UPDATE 
AS 
    IF(UPDATE(QUANTUMINPUT)) 
     BEGIN 
      UPDATE INV 
      SET INV.QUANTUM = INS.QUANTUM + INS.QUANTUMINPUT 
      FROM INVENTORY INV 
       JOIN INSERTED INS 
        ON ISNULL(INS.INVENID, 0) = ISNULL(INV.INVENID, 0) 
         AND ISNULL(INS.PRODUCTID, 0) = ISNULL(INV.PRODUCTID, 0) 
     END 
    ELSE IF(UPDATE(QUANTUMOUTPUT)) 
     BEGIN 
      UPDATE INV 
      SET INV.QUANTUM = INS.QUANTUM - INS.QUANTUMOUTPUT 
      FROM INVENTORY INV 
       JOIN INSERTED INS 
        ON ISNULL(INS.INVENID, 0) = ISNULL(INV.INVENID, 0) 
         AND ISNULL(INS.PRODUCTID, 0) = ISNULL(INV.PRODUCTID, 0) 
     END 

    INSERT INTO INVENTORY 
       (PRODUCTID, 
       QUANTUM) 
    VALUES  ('P01', 
       100) 

    UPDATE INVENTORY 
    SET QUANTUMOUTPUT = 1 
    WHERE PRODUCTID = 'P01' 

    UPDATE INVENTORY 
    SET QUANTUMINPUT = 1 
    WHERE PRODUCTID = 'P01' 
Смежные вопросы