8

使用支持临时表的 SQL Server 2016 ,我想知道是否有办法确定表当前是否为临时表?就像是

select * from sys.objects where object_id('dbo.MyTable', 'u') = parent_object_id and type_desc = "SYSTEM_VERSIONED"

4

4 回答 4

13
SELECT temporal_type
FROM   sys.tables
WHERE  object_id = OBJECT_ID('dbo.MyTable', 'u') 

0 = 非临时表

1 = HISTORY_TABLE

2 = SYSTEM_VERSIONED_TEMPORAL_TABLE

文档

于 2015-06-29T20:38:59.263 回答
3

本 SQL 教程中提供了另一种列出时态表及其历史表的方法,即列出 SQL Server 数据库中的时态表和历史表

select
 t.object_id,
 t.name,
 t.temporal_type,
 t.temporal_type_desc,
 h.object_id,
 h.name,
 h.temporal_type,
 h.temporal_type_desc
from sys.tables t
inner join sys.tables h on t.history_table_id = h.object_id 
于 2015-09-04T07:45:33.453 回答
1

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

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';
于 2018-02-01T18:23:46.447 回答
0

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

来自 Microsoft 文档

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
于 2017-05-08T15:20:57.833 回答