На этой странице я обнаружил, что last_insert_rowid()
будет возвращать последнюю вставку внутри триггера, но, похоже, нет способа сузить ее.
Вотнекоторый рабочий код, который я только что добавил для своего текущего проекта, если ревизия скрипта создается без ветки, она создаст ветку и установит Revisions.branch_id
для идентификатора этой ветки.
CREATE TRIGGER revision_insert_branch AFTER INSERT ON Revisions
FOR EACH ROW
WHEN NEW.branch_id = 0
BEGIN
INSERT INTO Branches (script_id) VALUES (NEW.script_id);
UPDATE Revisions SET branch_id = last_insert_rowid() WHERE row_id = NEW.row_id;
END;
НадеюсьЭто не так, поскольку вы буквально не можете его контролировать, с первого взгляда неясно, получает ли он идентификатор Revision
insert или Branches
insert.
Мой вопрос - просто скажите, что яесть еще одна вставка, и нет способа разбить запрос на несколько частей, как бы я это сделал?Вот быстрая идея, чтобы продемонстрировать, что я имею в виду:
BEGIN
INSERT INTO TableA () VALUES ();
INSERT INTO TableB () VALUES ();
DELETE FROM TableC WHERE unique_a = (
SELECT unique_val FROM TableA WHERE row_id=last_insert_rowid(TableA)
)
AND unique_b = (
SELECT unique_val FROM TableB WHERE row_id=last_insert_rowid(TableB)
)
END;