2016-12-23 9 views
0

ありがとうございました。 私は同じことをしていました。 MySqlのトリガを使用しているのは初めてです。私は今MS SQL Serverの年のためのトリガを使用していると私は奇妙なMysqlで見つける。それは決して発射されないように見えるか、または十分に速くイベントをキャッチしていません。実際のコードを書いて説明しましょう。Triser構文エラーの中で重複してキー更新が発生する

DROP trigger if exists sales_ins; 
delimiter // 
CREATE TRIGGER sales_ins 
AFTER INSERT ON pos_items 
FOR EACH ROW 
BEGIN 
DECLARE new_am INTEGER; 
SET new_am = 0; 
If NEW.item_class = 0 Then 
    Select 
      Sum(ifnull(pos_items.pos_quantity,0)) INTO new_am 
     From 
      pos_items Right Join pos_invoice On pos_items.inv_number = pos_invoice.inv_number And 
      pos_items.branch_id = pos_invoice.branch_id 
     Where 
      pos_invoice.inv_void_cacel = 0 And pos_items.item_class = 0 And pos_items.item_code = NEW.item_code 
     Group By 
      pos_items.item_code 
     Having 
      Not pos_items.item_code Is Null; 
    REPLACE INTO item_quantity VALUES (NEW.company_id, NEW.branch_id, NEW.item_code, 
     0, 0, 0, new_am, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, now(), NEW.rowguid); 
ElseIf NEW.item_class = 7 Then 
    Select 
      Sum(ifnull(pos_items.pos_quantity,0)) INTO new_am 
     From 
      pos_items Right Join pos_invoice On pos_items.inv_number = pos_invoice.inv_number And 
      pos_items.branch_id = pos_invoice.branch_id 
     Where 
      pos_invoice.inv_void_cacel = 0 And pos_items.item_class = 7 And pos_items.item_code = NEW.item_code 
     Group By 
      pos_items.item_code 
     Having 
      Not pos_items.item_code Is Null; 
    REPLACE INTO item_quantity VALUES (NEW.company_id, NEW.branch_id, NEW.item_code, 
     0, 0, 0, 0, new_am, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, now(), NEW.rowguid); 
End If; 
END // 
delimiter ; 

問題は、更新されていません。明確にするためにコードを説明します。 挿入後にpos_itemsテーブルがトリガされると(このqtyを合計する必要があるため挿入が使用された後)、すべてのトランザクション合計が販売数量として取得され、item_quantity item_sold_qtyフィールドが更新されるか、返品item_salesret_qtyフィールドが更新されます。

更新された数量は正確ではありません。 どのようにエラーが発生しているか、または作成ビューごとにmyisamテーブルが作成されているようですが、これも実行遅延です。ちょうど私は理解していません。 ご協力いただきありがとうございます。

+0

作成ステートメントの前に区切り文字が設定されていないようです。 –

+0

トリガーの前に区切り文が必要だと思います。 –

+0

行番号を増やして同じエラーで試行しました。 – Luckie

答えて

0
DROP TRIGGER IF EXISTS sales_ins; 
delimiter // 
CREATE TRIGGER sales_ins 
AFTER INSERT ON pos_items 
FOR EACH ROW 
BEGIN 
INSERT INTO item_quantity (
    company_id,branch_id,item_Code,item_Pur_Qty,item_PurRet_Qty,item_Damaged, 
    item_Sold_Qty,item_SalesRet_Qty,item_OtherSales_Ret,item_Stock_From, 
    item_Stock_To,item_Stock_Adjust,rem_Sales,item_Transfered,item_Stores_Qty, 
    item_MarRets,item_DelPur,item_Samples,item_Tailor,dateguid,rowguid) 
VALUES (
    NEW.company_id, NEW.branch_id, NEW.item_code, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, now(), NEW.rowguid) 
ON DUPLICATE KEY UPDATE 
    item_Sold_Qty = 0, 
    dateguid = now(); 
END // 
delimiter ; 
+0

を試しましたが、私は質問を変更しました。私のためにお読みください。ありがとう – Luckie

関連する問題