web-dev-qa-db-ja.com

テーブルの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 TABLE EmpSalary SET (SYSTEM_VERSIONING = OFF );

私の質問は、テーブルのSYSTEM_VERSIONINGがオンかどうかを確認してからテーブルを変更する方法ですか?

4
eandbsoftware

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 |
3
Scott Hodgin

または、その [〜#〜] objectproperty [〜#〜] :TableTemporalTypeを確認することもできます。

次のコードは、一時テーブルであるかどうかを確認するために論理チェックを実行し、そうである場合は、システムのバージョニングを非アクティブ化します。

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