如何检查表的 SYSTEM_VERSIONING 是否打开?

ean*_*are 8 sql-server ddl data-versioning sql-server-2016

我知道 SQL Server 2016 让我们使用 SYSTEM_VERSIONING 像:

CREATE TABLE EmpSalary  
(    
     EmpID int NOT NULL PRIMARY KEY CLUSTERED  
   , SalaryAmt decimal (10,2) NULL  
   , SalaryBeginDT datetime2 GENERATED ALWAYS AS ROW START NOT NULL  
   , SalaryEndDT datetime2 GENERATED ALWAYS AS ROW END NOT NULL  
   , PERIOD FOR SYSTEM_TIME (SalaryBeginDT, SalaryEndDT)     
)    
WITH (SYSTEM_VERSIONING = ON);
Run Code Online (Sandbox Code Playgroud)

同样要停用此功能,只需更改表:

ALTER TABLE EmpSalary SET (SYSTEM_VERSIONING = OFF );
Run Code Online (Sandbox Code Playgroud)

我的问题是如何检查表的 SYSTEM_VERSIONING 是否打开,然后更改表?

小智 8

或者,您可以检查其OBJECTPROPERTY:TableTemporalType。

以下代码将执行逻辑检查以查看它是否是临时表,如果是,则停用系统版本控制。

IF OBJECTPROPERTY(OBJECT_ID('EmpSalary'), 'TableTemporalType') = 2
    ALTER TABLE EmpSalary SET (SYSTEM_VERSIONING = OFF)
Run Code Online (Sandbox Code Playgroud)


Sco*_*red 6

你可以查询 sys.tables

ALTER TABLE EmpSalary SET (SYSTEM_VERSIONING = On );
select name, temporal_type, temporal_type_desc from sys.tables where name = 'EmpSalary'

| name      | temporal_type | temporal_type_desc              |
|-----------|---------------|---------------------------------|
| EmpSalary | 2             | SYSTEM_VERSIONED_TEMPORAL_TABLE |
Run Code Online (Sandbox Code Playgroud)
ALTER TABLE EmpSalary SET (SYSTEM_VERSIONING = OFF );
select name, temporal_type, temporal_type_desc from sys.tables where name = 'EmpSalary'

| name      | temporal_type | temporal_type_desc |
|-----------|---------------|--------------------|
| EmpSalary | 0             | NON_TEMPORAL_TABLE |
Run Code Online (Sandbox Code Playgroud)

  • @eandbsoftware - 如果我已经充分回答了您的问题,请考虑 [接受](https://dba.stackexchange.com/help/accepted-answer)。 (2认同)