自行创建新的系统版本表



在SQL Server中,我有Dimension表的系统版本表,IE:Dim.Entity和一个名为Dim.EntityHistory的命名历史表。然而,我最近注意到,在其中一些表上,SQL Server似乎自己制作了新的系统版本表(IE:MSSQL_TemporalHistoryFor_12928938(和";"踢";我的命名历史表放在通用表区域。有人知道为什么会发生这种事吗?根据我在文档中的理解,如果更新表模式,更改将自动传播到历史记录表(我最初认为这可能是发生这种情况的原因(。

我正在SQL Server 2019/Azure上运行。

感谢@Stu的回答。事实上,我在文档中发现,它们准确地描述了你需要做什么

BEGIN TRY
BEGIN TRAN
ALTER TABLE Dim.EntityName SET (SYSTEM_VERSIONING = OFF);
--Do Activity here IE: Truncate
ALTER TABLE Dim.Entity SET
(
SYSTEM_VERSIONING = ON (HISTORY_TABLE = Dim.EntityHistory)
);
COMMIT TRAN;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK;
SELECT ERROR_NUMBER() AS ErrorNumber
,ERROR_STATE() AS ErrorState
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH;

改编自以下文章:

重新打开系统版本控制时,不要忘记指定HISTORY_TABLE参数。否则,将创建一个新的历史记录表并将其与当前表关联。原始历史记录表仍将作为普通表存在,但不会与当前表关联。

https://learn.microsoft.com/en-us/sql/relational-databases/tables/stopping-system-versioning-on-a-system-versioned-temporal-table?view=sql-服务器-ver15

最新更新