-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                    
4

1 に答える 1

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

注目すべき変更点の 1 つは、「FOR UPDATE」ではなく「AFTER UPDATE」です。

于 2012-12-22T06:22:55.073 に答える