背景:
我的触发器可以工作,但坏了。由于目标表 [tbl_ccc_part] 上的编码和 UNIQUE 值,触发器会将所有插入的值扔到表中,并默默地删除违反 UNIQUE 条件的值。这会导致 [tbl_ccc_part] 增加 2,000 条记录,而不是几百条。
问题:
我如何有效地限制这个触发点,以便我回到最初的意图。
预期代码演练:
插入 [tbl_ccc_inventory.[business_level_supplier_id]]、[tbl_ccc_inventory.[stock_number]] 的 [tbl_ccc_inventory] 以及其他不相关记录。
TRIGGER 查看 [tbl_ccc_part.[business_level_supplier_id]] 和 [tbl_ccc_part.[stock_number]]。如果两者匹配,则不插入。如果没有匹配,则插入记录。
代码:
CREATE TRIGGER trg_insert_ccc_inventory AFTER INSERT ON tbl_ccc_inventory
/* This trigger automatically updates tbl_ccc_part after entries are
inserted into the tbl_ccc_inventory. These entries make several
assumptions about the values needed for tbl_ccc_part and should
be verified for accuracy by someone. */
BEGIN
INSERT OR IGNORE INTO tbl_ccc_part
(
record_id,
business_level_supplier_id,
stock_number,
oem_part_number,
part_type,
assembly_indicator,
insurer_program,
warranty_type,
warranty_length,
shippable_part
)
VALUES (
"A",
new.business_level_supplier_id,
new.stock_number,
new.stock_number,
"OD",
"N",
"N/A",
"LIMITED",
"LIMITED",
"Y");
END;
最佳答案
要有条件地执行触发器,请使用 WHEN clause :
CREATE TRIGGER xxx
AFTER INSERT ON tbl_ccc_inventory
WHEN NOT EXISTS (SELECT 1
FROM tbl_ccc_part
WHERE business_level_supplier_id = NEW.business_level_supplier_id
AND stock_number = NEW.stock_number)
BEGIN
INSERT ...;
END;
关于SQLite - 在表 1 上插入触发器以有条件更新表 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28790291/