Sql-Server

如何檢查表的 SYSTEM_VERSIONING 是否為 ON?

  • November 9, 2019

我知道 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);

同樣要停用它,只需要 ALTER 表:

ALTER TABLE EmpSalary SET (SYSTEM_VERSIONING = OFF );

我的問題是如何檢查表的 SYSTEM_VERSIONING 是否為 ON 然後 ALTER 表?

你可以查詢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 |

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 |

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

以下程式碼將執行邏輯檢查以查看它是否是臨時表,如果是,則停用系統版本控制。

IF OBJECTPROPERTY(OBJECT_ID('EmpSalary'), 'TableTemporalType') = 2
   ALTER TABLE EmpSalary SET (SYSTEM_VERSIONING = OFF)

引用自:https://dba.stackexchange.com/questions/218517