案子
我有两个具有以下结构的表(我删除了与问题无关的 34 个其他列)
Table1
------
Id
LastAccessed
Data1
Data2
Table1_History
------
_Id
Action
Id
LastAccessed
Data1
Data2
每次用户读取记录(使用特定程序)时,LastAccessed
时间戳都会改变。
我附加了一个触发器,如果或(或在我的情况下任何其他列更改),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
如果 LastAccessed 和 Data1 都更改(我想要),则此触发器不会复制行。为了解决这个问题,我可以将IF
语句更改为
IF UPDATE(Id) OR UPDATE(Data1) OR UPDATE(Data2) ... BEGIN
在这种情况下,它将按预期工作
问题:
由于我的表中有 34 列,因此在IF
语句中指定每一列并不容易。有没有更简单的方法来做到这一点?