2012-12-22 81 views
-1

如何在觸發器中使用下面的查詢,當self_id列被下一個記錄填充時自動觸發????更新觸發器語句

UPDATE tree_str 
SET  L1_Left = ml.self_id, 
    L1_Centre = mc.self_id, 
    L1_Right = mr.self_id 
FROM tree_str t LEFT JOIN 
    member ml ON t.self_id = ml.parent_id 
       AND ml.position = 'LEFT' LEFT JOIN 
    member mc ON t.self_id = mc.parent_id 
       AND mc.position = 'CENTER' LEFT JOIN 
    member mr ON t.self_id = mr.parent_id 
       AND mr.position = 'RIGHT' 

我用下面的觸發器,但它不工作.......

CREATE TRIGGER autoupdate ON [dbo].[tree_str] 
FOR UPDATE 
AS BEGIN 

UPDATE tree_str 
SET  L1_Left = ml.self_id, 
    L1_Centre = mc.self_id, 
    L1_Right = mr.self_id 
FROM tree_str t LEFT JOIN 
    member ml ON t.self_id = ml.parent_id 
       AND ml.position = 'LEFT' LEFT JOIN 
    member mc ON t.self_id = mc.parent_id 
       AND mc.position = 'CENTER' LEFT JOIN 
    member mr ON t.self_id = mr.parent_id 
       AND mr.position = 'RIGHT' 
END      
+0

請至少嘗試自己寫觸發器.... –

回答

0

請嘗試以下語法觸發:

CREATE TRIGGER autoupdate ON dbo.tree_str 
AFTER UPDATE 
AS BEGIN 
    UPDATE tree_str 
    SET L1_Left = ml.self_id, L1_Centre = mc.self_id, L1_Right = mr.self_id 
    FROM tree_str t LEFT JOIN 
    member ml ON t.self_id = ml.parent_id AND ml.position = 'LEFT' 
    LEFT JOIN member mc ON t.self_id = mc.parent_id AND mc.position = 'CENTER' 
    LEFT JOIN member mr ON t.self_id = mr.parent_id 
    AND mr.position = 'RIGHT' 

END 

一個值得注意的變化是, 'AFTER UPDATE'而不是'FOR UPDATE'。