我的应用程序上有两个表(我试图创建一个bug跟踪器)。一个我可以添加记录/问题,一个是问题的历史。
因此,第二个(Bugs_Shadow)表将创建新记录以及第一个(Bugs),然后,当有人尝试修复时,我可以在表1上更新问题。单击更新时,我希望它将更新行作为一个整体添加到第二个表,但也保留原始记录。因此,无论何时进行更改,它都将在Bugs_Shadow表中创建新记录。我希望这有道理吗?
我创建了这个触发器:
self.confirm(true) do
self.delete_thing_elements[index-1].click
sleep 5
end
它可以在第二个表中创建相同的条目但是当我更新第一个表中的条目时,它在第二个表中执行相同的操作,而我希望它创建一个相同的新记录来自用户所做的更改。
希望那里有一些帮助。这是我第一次尝试触发器,它花了我一段时间才到达这个阶段。
由于
答案 0 :(得分:0)
你需要在这里触发:
CREATE TRIGGER [tr_Bugs_Insert]
ON [dbo].[Bugs]
AFTER INSERT
AS
BEGIN
INSERT INTO Bugs_Shadow (BugID, [User], Date, Subject, Description, [Source Code], [Current State])
SELECT BugID, [User], Date, Subject, Description, [Source Code], [Current State]
FROM Bugs
END
GO
CREATE TRIGGER [tr_Bugs_Update]
ON [dbo].[Bugs]
BEFORE UPDATE
AS
BEGIN
INSERT INTO Bugs_Shadow (BugID, [User], Date, Subject, Description, [Source Code], [Current State])
SELECT BugID, [User], Date, Subject, Description, [Source Code], [Current State]
FROM Bugs
END
编辑
MS SQL在触发前不支持,因此上述内容无效。
您可以使用INSTEAD
触发器。使用INSTEAD
触发器,仅执行触发器而不执行原始语句。
因此,您应该在该触发器中执行的操作是将旧值插入一个表中并更新另一个表。
有关详细信息,请参阅此问题: How can I do a BEFORE UPDATED trigger with sql server?
在那里也有一些答案指明了替代解决方案。