【发布时间】:2015-10-01 02:14:50
【问题描述】:
如果记录被更新,它将被标记为 Y,最新版本将被标记为 null。最新更新记录的 CreationDate 应取自先前记录的 ModificationDate。但如屏幕截图所示,该字段未正确更新。有谁知道如何解决这个错误?
如果 CreationDate 字段值准确,则记录应按无顺序排列。 6、8、7
CREATE TRIGGER CloneAfterUpdate ON ProcessList
AFTER UPDATE
AS
IF (UPDATE (Amount) OR UPDATE (NAME))
BEGIN
INSERT INTO ProcessListHist (
ID
,NAME
,Amount
,CreationDate
,Edited
,ModificationDate
)
SELECT ID
,NAME
,Amount
,CreationDate
,'Y'
,GETDATE()
FROM deleted
UPDATE ProcessList
SET ProcessList.CreationDate = ProcessListHist.ModificationDate
FROM ProcessList
INNER JOIN ProcessListHist ON ProcessList.ID = ProcessListHist.ID
END
UPDATE ProcessList
SET Amount = 9800
WHERE NAME = 'Rachel'
SELECT *
FROM ProcessList
UNION ALL
SELECT *
FROM ProcessListHist
ORDER BY ID ASC ,CreationDate ASC
--- 更新---
CREATE TABLE dbo.ProcessList
(
Edited varchar(1),
ID integer NOT NULL,
Name varchar(30) NOT NULL,
Amount smallmoney NOT NULL,
CreationDate datetime DEFAULT GETDATE(),
ModificationDate datetime,
PRIMARY KEY (ID, CreationDate)
)
CREATE TABLE dbo.ProcessListHist
(
Edited varchar(1),
ID integer NOT NULL,
Name varchar(30) NOT NULL,
Amount smallmoney NOT NULL,
CreationDate datetime NOT NULL,
ModificationDate datetime,
PRIMARY KEY (ID, CreationDate)
)
【问题讨论】:
-
我认为如果你指定你正在使用的表结构会很有帮助,因为现在我们不得不猜测它们。两个表的主键都是ID + CreationDate?
-
@eyeballs 您的编辑栏可能是多余的。您只能使用
CreationDate和ModificationDate。所以没有更新的记录会有ModificationDateNULL。