2015-11-25 184 views
1

我有一個包含bal_load int列的配置文件表。 我有2個額外的表格,即債務和支付金額欄。 我需要做一個觸發器,在向債務插入一個值後,將插入的債務添加profile.bal_load的當前值,同時扣除插入是否來自付款。插入更新後創建觸發器

配置文件的表

+--+--------+ 
|ID|BAL_LOAD| 
+--+--------+ 
|1 |500  | 
|2 |300  | 
+--+--------+ 

如果這樣的刀片將在債務的表發生,

債務

+--+----------+------+ 
|ID|PROFILE_ID|AMOUNT| 
+--+----------+------+ 
|1 |1   |20 | 
+--+----------+------+ 

則觸發應與債務的數額增加bal_load。

PROFILE

+--+--------+ 
|ID|BAL_LOAD| 
+--+--------+ 
|1 |520  | -->500+20 
|2 |300  | 
+--+--------+ 

如果這樣的刀片將在付款的餐桌發生,

付款

+--+----------+------+ 
|ID|PROFILE_ID|AMOUNT| 
+--+----------+------+ 
|1 |2   |220 | 
+--+----------+------+ 

則觸發應該減去bal_load與支付的金額。

PROFILE

+--+--------+ 
|ID|BAL_LOAD| 
+--+--------+ 
|1 |520  | 
|2 |80  | -->300-220 
+--+--------+ 

這是我對債務的金額插入憔悴觸發

create trigger bal_load_debt after insert on debt 
for each row 
begin 
update profile 
set bal_load = bal_load + amount 
where profile.id = debt.profile_id; 
end 

和支付的金額插入

create trigger bal_load_payment after insert on payment 
for each row 
begin 
update profile 
set bal_load = bal_load + amount 
where profile.id = payment.profile_id; 
end 

請幫助:)

對於更新,我用這個

CREATE TRIGGER bal_load_debt 
AFTER INSERT 
ON debt 
FOR EACH ROW 
    UPDATE Profile 
    SET bal_load = bal_load + NEW.amount 
    WHERE profile.id = debt.profile_id 

我得到這個錯誤消息

1235 - 該版本的MySQL還不支持「多個觸發器使用相同的動作時間和事件一個表」

+2

SQL Server不具有'的每一行'選項 –

+0

我很抱歉造成混亂,我正在使用xampp的mysql。順便說一句謝謝你的迴應:) – user2713803

+0

下面的例子可能會有幫助:[SQL小提琴演示(http://sqlfiddle.com/#!9/65cda/1)。 – wchiquito

回答

2

你的觸發器是錯誤的幾個點:

  1. SQL Server不具有for each row選項
  2. 您需要定義這個觸發器就是在
  3. 觸發器將在聲明中火一次,但這種說法可能插入(或更新)多行,而你需要處理的是

所以你的觸發器應是這個樣子:

CREATE TRIGGER bal_load_debt 
ON dbo.Debt 
AFTER INSERT 
AS 
    UPDATE dbo.Profile 
    SET bal_load = bal_load + SUM(i.amount) 
    FROM Inserted i -- newly inserted rows 
    WHERE Profile.id = i.profile_id; 

新插入的行(這ç一個是多個)都在Inserted僞表中可用(它具有完全相同的結構,觸發連接表) - 你可以抓住有關從該表中的觸發器的行信息。

UPDATE的情況下,Deleted僞表將包含舊值(在UPDATE之前),而Inserted僞表將包含新值(在UPDATE後) - 讓您同時擁有在AFTER UPDATE觸發器中可用的值集。

閱讀所有細節在CREATE TRIGGER命令in the freely available MSDN SQL Server Books Online documentation的各種選項應該始終是你第一次去尋找SQL Server特定的幫助的地方