Может ли темпоральная таблица архивировать вставку? - PullRequest
0 голосов
/ 18 июня 2020

Я создал следующую временную таблицу

/*
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

И записи будут быстро сохранены после вставки. С другой стороны, это хорошо, поскольку с тех пор мне не нужно вручную синхронизировать схему таблицы со схемой таблицы истории.

...