我提供了一种在SQL中执行此操作的方法。请注意,这个答案是受以下注意事项:
我无需提供任何展具,或参考材料回答。这意味着答案来自我的记忆。
特别是这意味着该解决方案尚未编译;在某些方面它的语法和语义也可能不起作用。
我已经使用了我最熟悉的sql变种 - 火鸟。您需要的确切语法可能会有所不同,具体取决于您可以使用的SQL。
此外,我假设变量名称足够自我解释,不需要进一步评论。
最后,这个答案可能可以改进 - SELECT语句的重复向我表明,有一种改进可以消除这种重复。
SET TERM !! ;
CREATE TRIGGER Deep_Copy_Room FOR Location
BEFORE INSERT
POSITION 0
AS BEGIN
NEW.id = GEN_ID (id_GEN, 1);
INSERT INTO Room (id, name, size, fk)
VALUES (GEN_ID(id_GEN, 1), Roo_name, Roo_Size, NEW.id)
WHERE SELECT id, name, size, FK_id FROM Room AS Roo_Id, Roo_name, Roo_size
WHERE SELECT id, name, addrss FROM Location AS Loc_Id, Loc_name, Loc_address
WHERE fk = Copy_From_id;
INSERT INTO Item (id, name, type, value, fk_id)
VALUES (GEN_ID(id_GEN,1), Ite_name, Ite_type, Ite_value, Roo_id)
WHERE SELECT id, name, type, value, FK_id FROM RoomItem AS Ite_Id, Ite_name, Ite_type, Ite_value, Roo_Id)
WHERE SELECT id, name, size, FK_id FROM Room AS Roo_Id, Roo_name, Roo_size, Loc_id
WHERE SELECT id, name, address FROM Location AS Loc_Id, Loc_name, Loc_address
WHERE Loc_id = Copy_From_id;
END
SET TERM ; !!
谢谢,所以我猜“手动”选项是在这种情况下唯一的选择。 – bobblez 2012-08-16 08:51:50