Я создал следующую временную таблицу
/*
ALTER TABLE [dbo].________Test SET ( SYSTEM_VERSIONING = OFF)
GO
DROP TABLE dbo.________Test
GO
DROP TABLE dbo.________TestHistory
GO
*/
CREATE TABLE dbo.________Test
(
DeptID INT NOT NULL PRIMARY KEY CLUSTERED
, DeptName VARCHAR(50) NOT NULL
, ManagerID INT NULL
, ParentDeptID INT NULL
, SysStartTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL
, SysEndTime DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL
, PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)
-- ) WITH (SYSTEM_VERSIONING = ON);
) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.________TestHistory));
Теперь я могу вставлять, обновлять и удалять значения. Но значения сохраняются только при обновлении или удалении. Есть ли способ архивировать и инструкции вставки?
Я хочу избежать написания триггера для этого, если это вообще возможно ... Наличие данных в двух таблицах крайне невыгодно, потому что тогда мне нужно сначала создать объединение и пропустить какое-либо поле, созданное впоследствии, или у меня есть потенциально мусорные столбцы, если я использую SELECT * и создаю объединенное представление, если столбец - порядок будет изменен, плюс будут отсутствовать новые столбцы.
Хммм, эти темпоральные таблицы кажутся действительно глупыми (они сделаны) ... Очевидно, они фиксируют каждое потенциальное изменение, даже если в данных нет изменений. Итак, я могу сделать это:
CREATE TRIGGER TR_________Test_AfterInsert ON dbo.________Test
AFTER INSERT
AS
BEGIN
UPDATE dbo.________Test
SET DeptID = DeptID
WHERE DeptID IN
(
SELECT DeptID
FROM inserted
)
END
И записи будут быстро сохранены после вставки. С другой стороны, это хорошо, поскольку с тех пор мне не нужно вручную синхронизировать схему таблицы со схемой таблицы истории.