小编Fra*_*ank的帖子

删除系统版本化时态表的过程

我正在寻找一个过程来删除系统版本控制的时态表,理想情况下不使用动态 SQL。我已经浏览了 Microsoft 文档并弄清楚了如何获取自动生成的历史记录表名称,但我对游标知之甚少,对动态 SQL 知之甚少。

你不能只是删除一个临时表。必须先禁用版本控制,这会导致历史表变成普通表。然后,您可以删除时态表及其对应的历史表。

ALTER TABLE [dbo].[TemporalTest] SET ( SYSTEM_VERSIONING = OFF )
GO
DROP TABLE [dbo].[TemporalTest]
GO
DROP TABLE [dbo].[TemporalTestHistory]
GO
Run Code Online (Sandbox Code Playgroud)

我正在使用带有自动生成历史表的时态表,所以我不知道它们的名字。但是,Microsoft 文档提供了有关如何列出历史记录表的信息,因此我有一种获取这些名称的方法。

select schema_name(t.schema_id) as temporal_table_schema,
     t.name as temporal_table_name,
    schema_name(h.schema_id) as history_table_schema,
     h.name as history_table_name,
    case when t.history_retention_period = -1 
        then 'INFINITE' 
        else cast(t.history_retention_period as varchar) + ' ' + 
            t.history_retention_period_unit_desc + 'S'
    end as retention_period
from sys.tables t
    left outer join sys.tables h
        on t.history_table_id = h.object_id
where t.temporal_type = 2 …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

5
推荐指数
1
解决办法
5068
查看次数

标签 统计

sql-server ×1

t-sql ×1