2
我有一個關係表與兩個指向同一個表的外鍵。轉換MySQL插入和更新到SQL Server觸發器
第一個外鍵列應始終是外部屬性的最小值,第二個外鍵最多。
我是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;
SQL Server沒有'BEFORE INSERT'觸發器;你有'正常的'ON/AFTER INSERT'觸發器,或者你可以使用'INSTEAD OF INSERT'觸發器來執行,而不是你的INSERT語句。 –
好吧,你可以從插入兩個連接,雖然沒有看到一個巨大的好處。不得不說,你正在試圖實施的「規則」,是很好的要求。 –
看不到如何使用兩個連接來解決它。現在使用選擇條件'CASE ... THEN ... ELSE'解決它。 – djmj