同じテーブルを指す 2 つの外部キーを持つリレーショナル テーブルがあります。
最初の外部キー列は常に外部プロパティの最小値であり、2 番目の列は最大値でなければなりません。
私はSQL Serverを初めて使用し、inserted
一時テーブルを使用した挿入を使用する必要があることを読みましたが、ループを使用せずに最小および最大のリレーショナル子を設定してinserted
エントリを反復処理するにはどうすればよいですか.
テーブル:
table Child
{
int id;
int value;
}
table Parent
{
int id;
// foreign-keys A enforce minimum child value!
int childA;
int childB;
}
MySql トリガー
CREATE TRIGGER parent_beforeInsert
BEFORE INSERT ON Parent
FOR each ROW
BEGIN
DECLARE childAValue AS INT;
DECLARE childBValue AS INT;
SET childAValue = (SELECT value FROM Child WHERE ID = NEW.childA);
SET childBValue = (SELECT value FROM Child WHERE ID = NEW.childB);
-- only check if b > a since reverse is wished behavior
IF childBValue > childAValue
BEGIN
-- swap values
DECLARE newChildA AS INT = NEW.childA
SET NEW.childA = NEW.childB;
SET NEW.childB = newChildA;
END;
END;