【发布时间】:2018-12-06 16:50:54
【问题描述】:
我有一个 SQL Server 2017 数据库,并创建了一个Department 表,如下所示
CREATE TABLE Department
(
DeptID INT NOT NULL PRIMARY KEY CLUSTERED,
DeptName VARCHAR(50) NOT NULL,
ManagerID INT NULL,
ParentDeptID INT NULL,
StartTime DATETIME2 GENERATED ALWAYS AS ROW START
CONSTRAINT DF_Department_SysStartTime DEFAULT SYSUTCDATETIME() NOT NULL,
EndTime DATETIME2 GENERATED ALWAYS AS ROW END
CONSTRAINT DF_Department_SysEndTime
DEFAULT CONVERT( DATETIME2, '9999-12-31 23:59:59' ) NOT NULL,
PERIOD FOR SYSTEM_TIME(StartTime, EndTime)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.DepartmentHistory));
接下来我使用下面的代码插入一行
INSERT INTO Department (DeptID, DeptName, DepartmentDescription)
VALUES (1, 'Sales', 'Sales department')
我在Department 表和DepartmentHistory 表上运行了一个选择,Department 包含我插入的 1 行,但 DepartmentHistory 没有。
我运行如下更新,发布更新 DepartmentHistory 填充了 1 行。
UPDATE Department
SET DeptID = 2
WHERE DeptID = 1
时态表不显示插入的行吗?
【问题讨论】:
-
您的意思是:不显示当前行。现在,他们为什么要这样做;)
-
既然插入的行已经存在于表中,为什么还要显示它们呢?另一方面,它们将显示已删除/更新的行。
-
所以也许更清楚一些,以上面的例子,DepartmentHistory 显示更新后的部门 id 为 2,实际上部门 1 是初始值,它被更改为 2,所以问题是历史表没有记录插入时的更改。这是预期的行为吗?
标签: sql-server sql-server-2016 sql-server-2017 temporal-tables