2011-09-10 35 views
-1

アクティブに設定されている行を1つだけ設定したいとします。 誰かが、1としてestrutura_versao_statusを設定する前に0に他のすべてのestrutura_versao_statusを設定し、一つだけestrutura_versao_status = 1このトリガーには何が問題なのですか?

CREATE TRIGGER tgr_classifica_ativa_revisao BEFORE INSERT ON `sys_estrutura` 
FOR EACH ROW 
BEGIN 
    IF (NEW.estrutura_versao_status = 1) THEN 
     UPDATE `sys_estrutura` SET estrutura_versao_status = 0; 
    END IF; 
END; 

としてこの新しい行を維持しようとするとこれはエラーです:あなたはSQLでエラーが発生しています構文;あなたのMySQLサーバのバージョンに対応するマニュアルを調べて、正しい構文が行5に近いところで使用するようにしてください。

答えて

2

新しく挿入された行にフラグを設定すると仮定して、NEW変数に割り当てます。テーブルに対してUPDATEを行う必要はありません。

CREATE TRIGGER tgr_classifica_ativa_revisao BEFORE INSERT ON sys_estrutura 
FOR EACH ROW 
BEGIN 
    IF (NEW.estrutura_versao_status = 1) THEN 
     SET NEW.estrutura_versao_status = 0; 
    END IF; 
END; 
+0

私はこのエラーを受け取ります。SQL構文に誤りがあります。あなたのMySQLサーバのバージョンに対応するマニュアルを調べて、正しい構文を "at line 5"の近くで使用するようにしてください。 –

+0

ポイントは、estrutura_versao_statusが1に設定されているテーブルにエントリが1つしかないということでした(私は推測します)。 – Friek

+0

何が問題なのですか?まだエラーが発生しています... –