如何确定sql表是否是时态的?

如何确定sql表是否是时态的?,sql,sql-server,sql-server-2016,Sql,Sql Server,Sql Server 2016,有了SQL Server 2016的支持,我想知道是否有一种方法可以确定表当前是否是时态的?差不多 从sys.objects中选择*,其中object\u id('dbo.MyTable','u')=父对象\u id,并键入\u desc=“SYSTEM\u VERSIONED” 0=非时态表 1=历史记录表 2=系统\u版本化\u临时\u表 本SQL教程提供了另一种将时态表及其历史表列在一起的方法 此查询将为您提供系统版本表、关联的历史记录表、保留策略,以及是否在数据库级别启用保留策略 以下

有了SQL Server 2016的支持,我想知道是否有一种方法可以确定表当前是否是时态的?差不多

从sys.objects中选择*,其中object\u id('dbo.MyTable','u')=父对象\u id,并键入\u desc=“SYSTEM\u VERSIONED”

0=非时态表

1=历史记录表

2=系统\u版本化\u临时\u表


本SQL教程提供了另一种将时态表及其历史表列在一起的方法


此查询将为您提供系统版本表、关联的历史记录表、保留策略,以及是否在数据库级别启用保留策略


以下是对原始基本问题的简单回答:

SELECT *
FROM sys.tables
WHERE name = 'MyTable'
    AND schema_id = SCHEMA_ID('dbo')
    AND temporal_type_desc = 'SYSTEM_VERSIONED_TEMPORAL_TABLE'
下面是一个类似的查询,查找实际的系统管理历史记录表:

SELECT h.* FROM sys.tables p 
INNER JOIN sys.tables h
    ON p.history_table_id = h.object_id
WHERE p.name = 'MyTable'
    AND p.schema_id = SCHEMA_ID('dbo')
    AND p.temporal_type_desc = 'SYSTEM_VERSIONED_TEMPORAL_TABLE';

似乎历史保留政策只在2017年才出台。例如,除非删除保留位,否则上述查询在SQL 2016中不起作用。但我希望我错了,在SQL 2016中,我做错了什么???
SELECT DB.is_temporal_history_retention_enabled,
SCHEMA_NAME(T1.schema_id) AS TemporalTableSchema,
T1.name as TemporalTableName,  SCHEMA_NAME(T2.schema_id) AS HistoryTableSchema,
T2.name as HistoryTableName,T1.history_retention_period,
T1.history_retention_period_unit_desc
FROM sys.tables T1  
OUTER APPLY (select is_temporal_history_retention_enabled from sys.databases
where name = DB_NAME()) AS DB
LEFT JOIN sys.tables T2   
ON T1.history_table_id = T2.object_id WHERE T1.temporal_type = 2
SELECT *
FROM sys.tables
WHERE name = 'MyTable'
    AND schema_id = SCHEMA_ID('dbo')
    AND temporal_type_desc = 'SYSTEM_VERSIONED_TEMPORAL_TABLE'
SELECT h.* FROM sys.tables p 
INNER JOIN sys.tables h
    ON p.history_table_id = h.object_id
WHERE p.name = 'MyTable'
    AND p.schema_id = SCHEMA_ID('dbo')
    AND p.temporal_type_desc = 'SYSTEM_VERSIONED_TEMPORAL_TABLE';