如何从 DACFx API 获取时间 table 架构信息?
How can I get temporal table schema information from DACFx API?
考虑以下 TSql 代码:
CREATE TABLE Employee
(
[EmployeeID] int NOT NULL PRIMARY KEY CLUSTERED
, [Name] nvarchar(100) NOT NULL
, [Position] varchar(100) NOT NULL
, [Department] varchar(100) NOT NULL
, [Address] nvarchar(1024) NOT NULL
, [AnnualSalary] decimal (10,2) NOT NULL
, [ValidFrom] datetime2 (2) GENERATED ALWAYS AS ROW START
, [ValidTo] datetime2 (2) GENERATED ALWAYS AS ROW END
, PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));
...以及以下使用 DACFx 的 C# 代码:
TSqlObject table;
TSqlObject nameColumn;
// picture some code instantiating the two variables above
var primaryKey = table.GetChildren().Single(x => x.ObjectType == ModelSchema.PrimaryKeyConstraint);
var isMax = nameColumn.Object.GetProperty<bool?>(Column.IsMax);
所以在这里我们看到我查询了 DACFx API 以查明列实例是否是 MAX 类型的列,并获取信息在 table 的主键上。
现在我想知道 table 的时间设置。我需要知道 SYSTEM_VERSIONING
是否打开,如果打开,作为历史 table 的 table 是什么。我还想知道哪些字段用作行的开始和结束。
我如何使用 DACFx 知道这一点 API?
我知道这是一个老问题,但我花了一整天终于弄明白了如何拉 SYSTEM_VERSIONING 设置。希望这对其他人有帮助:
TSqlObject table;
// Code initializing the variable
// Get the type of retention. This can be either -1 (if Infinite)
// or one of the value in the TemporalRetentionPeriodUnit enum
var retentionUnit = table.GetProperty<int>(Table.RetentionUnit);
// Get the retention value. If retention is Infinite this will be -1
var retentionValue = table.GetProperty<int>(Table.RetentionValue);
// Get a reference to the history table.
var historyTable = table.GetReferenced(Table.TemporalSystemVersioningHistoryTable);
考虑以下 TSql 代码:
CREATE TABLE Employee
(
[EmployeeID] int NOT NULL PRIMARY KEY CLUSTERED
, [Name] nvarchar(100) NOT NULL
, [Position] varchar(100) NOT NULL
, [Department] varchar(100) NOT NULL
, [Address] nvarchar(1024) NOT NULL
, [AnnualSalary] decimal (10,2) NOT NULL
, [ValidFrom] datetime2 (2) GENERATED ALWAYS AS ROW START
, [ValidTo] datetime2 (2) GENERATED ALWAYS AS ROW END
, PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));
...以及以下使用 DACFx 的 C# 代码:
TSqlObject table;
TSqlObject nameColumn;
// picture some code instantiating the two variables above
var primaryKey = table.GetChildren().Single(x => x.ObjectType == ModelSchema.PrimaryKeyConstraint);
var isMax = nameColumn.Object.GetProperty<bool?>(Column.IsMax);
所以在这里我们看到我查询了 DACFx API 以查明列实例是否是 MAX 类型的列,并获取信息在 table 的主键上。
现在我想知道 table 的时间设置。我需要知道 SYSTEM_VERSIONING
是否打开,如果打开,作为历史 table 的 table 是什么。我还想知道哪些字段用作行的开始和结束。
我如何使用 DACFx 知道这一点 API?
我知道这是一个老问题,但我花了一整天终于弄明白了如何拉 SYSTEM_VERSIONING 设置。希望这对其他人有帮助:
TSqlObject table;
// Code initializing the variable
// Get the type of retention. This can be either -1 (if Infinite)
// or one of the value in the TemporalRetentionPeriodUnit enum
var retentionUnit = table.GetProperty<int>(Table.RetentionUnit);
// Get the retention value. If retention is Infinite this will be -1
var retentionValue = table.GetProperty<int>(Table.RetentionValue);
// Get a reference to the history table.
var historyTable = table.GetReferenced(Table.TemporalSystemVersioningHistoryTable);