我有以下的(我删除34并没有质疑相关的其他列)
Table1
------
Id
LastAccessed
Data1
Data2
Table1_History
------
_Id
Action
Id
LastAccessed
Data1
Data2
两个表每次用户读取记录(使用特定步骤)时,时间戳将会改变。
我附加了一个触发器到Table1
如果Data1
或Data2
(或在我的情况下任何其他列更改)复制记录到历史表;但是我不想要一个副本或记录,以防LastAccessed
更改。
这里是我的触发
CREATE TRIGGER [TRIGGER!]
ON TABLE1
AFTER UPDATE, DELETE
AS
BEGIN
SET NOCOUNT ON;
IF NOT UPDATE([LastAccessed]) BEGIN
IF EXISTS(SELECT * FROM inserted) BEGIN
INSERT INTO [Table1_Hist](
Action, Id, LastAccessed, Data1, Data2
) SELECT
'EDIT', Id, LastAccessed, Data1, Data2
FROM deleted
END ELSE BEGIN
INSERT INTO [Table1_Hist](
Action, Id, LastAccessed, Data1, Data2
) SELECT
'DELETE', Id, LastAccessed, Data1, Data2
FROM deleted
END
END
END
这个触发不会复制行如果上次访问和数据1两种变化(我想)。要解决这个问题,我可以改变IF
声明
IF UPDATE(Id) OR UPDATE(Data1) OR UPDATE(Data2) ... BEGIN
在这种情况下,它会工作打算
问题: 正如我在我的表34列,不容易指定每在IF
声明中列。 有没有更简单的方法来做到这一点?
谢谢你法案,我写了一个应用程序(在C#中),已经这样做。它是自动的,但是输出非常大。我希望看起来更简单的解决方案 – AaA