2015-01-02 52 views
0

之間計算,我有兩個表PRODUCTINVOICE觸發SQL兩個表

Create table PRODUCT(){ 
    PRODUCTID nvarchar(10), -- product id 
    PRICE float, 
} 
Create table INVOICE(){ 
    PRODUCTID nvarchar(10), 
    QUANTUM int, 
    AMOUNT float, 
} 

現在我想創建Trigger計算列AMOUNTINVOICEAMOUNT = QUANTUM * PRICE

感謝您的幫助!

create trigger trig_INVOICE 
on INVOICE 
after insert, update 
as 
begin 
    declare @price float 
    declare @ProductId nvarchar(10) 
    set @ProductID = (Select PRODUCTID from INVOICE) 
    set @price = (Select PRICE from PRODUCT where PRODUCT.PRODUCTID = @ProductId) 
    UPDATE INVOICE set AMOUNT = QUANTUM * @price 
end 

它不行-_-

+1

這是什麼引擎? mySQL或SQL Server? – xQbert

+0

到目前爲止,有什麼必須嘗試? –

+0

爲什麼你需要一個列,創建一個視圖來獲得計算量值? – HaveNoDisplayName

回答

0

Invoice表的主鍵添加InvoiceID列。

添加觸發INVOICE

CREATE TRIGGER invoice_trg 
    ON dbo.INVOICE AFTER INSERT 
AS 
BEGIN 
    UPDATE INVOICE 
    SET AMOUNT = INVOICE.QUANTUM * PRODUCT.price 
    FROM INVOICE 
    INNER JOIN PRODUCT ON INVOICE.PRODUCTID = PRODUCT.PRODUCTID 
    INNER JOIN INSERTED ON INVOICE.PRODUCTID = INSERTED.PRODUCTID 

END 
0

添加主鍵到發票表中,可以說因維人,那麼你應該能夠使用下面的觸發器。

CREATE TRIGGER trig_INVOICE ON INVOICE 
AFTER INSERT, UPDATE 
AS 
BEGIN 
    UPDATE INVOICE 
    SET  AMOUNT = QUANTUM * Price 
    FROM inserted ins 
      INNER JOIN invoice 
      ON InvID = InvID 
      INNER JOIN Product 
      ON inserted.ProductID = Product.ProductID; 
END;/ 
0

觸發器不會執行每個。像這樣改變你的觸發器。

CREATE TRIGGER trig_INVOICE 
ON INVOICE 
after INSERT, UPDATE 
AS 
    BEGIN 
     UPDATE a 
     SET AMOUNT = QUANTUM * p.price 
     FROM INVOICE a 
      JOIN inserted b 
       ON a.PRODUCTID = b.PRODUCTID 
      JOIN PRODUCT p 
       ON a.PRODUCTID = p.PRODUCTID 
    END