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