Если записи обновлены, они будут отмечены значком Y, а последняя версия будет отмечена нулем. CreationDate из последней обновленной записи следует взять из ModificationDate предыдущей записи. Но поле неправильно обновляется, как показано на скриншоте. Кто-нибудь знает, как решить эту ошибку?Значения полей SQL не точно обновляются
Если значение поля CreationDate является точным, записи должны быть в порядке no. 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? – Andrew
@eyeballs Ваша колонка Edited, вероятно, избыточна. Вы можете использовать для этого только 'CreationDate' и' ModificationDate'. Таким образом, не обновленные записи имели бы 'ModificationDate' NULL. – lad2025