如何删除 SQL Server 中的时态表?

Tar*_*zan 3 sql-server azure-sql-database

我正在尝试删除 SQL Server 中的临时(系统版本控制)表。我用的是常规DROP TABLE语句。

DROP TABLE [schema].[table]
GO
Run Code Online (Sandbox Code Playgroud)

这引发了以下错误:

表“[database].[schema].[table]”上的删除表操作失败,因为它不是系统版本控制的时态表上支持的操作。

如何删除 SQL Server 中的时态表?

Bob*_*mes 12

要删除系统版本控制表,您首先必须关闭系统版本控制。

    CREATE TABLE [temporal]([id]        int IDENTITY(1, 1)
                                PRIMARY KEY CLUSTERED,
                       [ValidFrom] datetime2(7) GENERATED ALWAYS AS ROW START HIDDEN
                                        NOT NULL,
                    [ValidTo]   datetime2(7) GENERATED ALWAYS AS ROW END HIDDEN
                                        NOT NULL,
                    PERIOD FOR SYSTEM_TIME([ValidFrom], [ValidTo])) WITH(SYSTEM_VERSIONING = ON(HISTORY_TABLE = [dbo].[Temporal_History]));


drop table temporal;
Run Code Online (Sandbox Code Playgroud)

这将导致

表“tempdb.dbo.temporal”上的删除表操作失败,因为它不是系统版本控制的时态表上支持的操作。

如果您关闭系统版本,您将能够删除表。如果不再需要历史表,也不要忘记删除它

ALTER TABLE dbo.temporal  SET ( SYSTEM_VERSIONING = Off )

drop table temporal;
drop table Temporal_History
Run Code Online (Sandbox Code Playgroud)