Sql-Server
如何檢查表的 SYSTEM_VERSIONING 是否為 ON?
我知道 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)