Deb*_*bra 5 sql-server import temporal-tables sql-server-2016
有没有人试过用旧的历史数据预填充时态表?在我们决定使用时态表之前,我们需要能够将我们的旧历史导入其中。
是的,您可以将旧历史记录导入历史表中。这是一个简单的示例,展示了如何执行此操作 - 您需要暂时关闭系统版本控制。
CREATE TABLE dbo.TemporalExampleHistory
(
TemporalID int NOT NULL,
UserName sysname,
ValidFrom datetime2 NOT NULL,
ValidTo datetime2 NOT NULL
);
GO
CREATE TABLE dbo.TemporalExample
(
TemporalID int PRIMARY KEY,
UserName sysname,
ValidFrom datetime2 GENERATED ALWAYS AS ROW START NOT NULL,
ValidTo datetime2 GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH
(
SYSTEM_VERSIONING = ON
(
HISTORY_TABLE = dbo.TemporalExampleHistory
)
);
Run Code Online (Sandbox Code Playgroud)
现在,插入一些数据:
INSERT dbo.TemporalExample(TemporalID, UserName)
VALUES(1,N'Bob'),(2,N'Frank');
-- update a row to make some history:
UPDATE dbo.TemporalExample
SET UserName = N'Frankie'
WHERE TemporalID = 2;
Run Code Online (Sandbox Code Playgroud)
验证历史表中是否存在系统版本控制的行:
SELECT * FROM dbo.TemporalExampleHistory;
Run Code Online (Sandbox Code Playgroud)
现在,将行插入历史记录中。一次执行一个步骤;如果这些都在一个批次中,解析器将阻止插入。
BEGIN TRANSACTION; -- may want SERIALIZABLE here
ALTER TABLE dbo.TemporalExample SET (SYSTEM_VERSIONING = OFF);
INSERT dbo.TemporalExampleHistory(TemporalID, UserName, ValidFrom, ValidTo)
SELECT TOP (1) TemporalID, N'Little Frankie', '19000101', ValidFrom
FROM dbo.TemporalExampleHistory
WHERE TemporalID = 2
ORDER BY ValidFrom;
ALTER TABLE dbo.TemporalExample SET
(
SYSTEM_VERSIONING = ON
(
HISTORY_TABLE = dbo.TemporalExampleHistory,
DATA_CONSISTENCY_CHECK = ON
)
);
COMMIT TRANSACTION;
Run Code Online (Sandbox Code Playgroud)
现在验证历史表中现在有两个版本化的 id = 2 行:
SELECT * FROM dbo.TemporalExampleHistory;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |