列の型を変えたり、Temporal Table が要らなくなって、定義から消した場合*1にやられる。。
Cannot change data types of a temporal table columns - Developer Community
回避方法は ↑ に書いてある通り、*.dbmdl 消したり、↓ のような alter で Temporal Table を止めたりしないとダメ。
alter table [HogeTable] set (system_versioning = off)
列の型変えるでエラーを防ごうとした場合、History テーブルもちゃんと CREATE 文で作ってやったらよさそう。
失敗する例:History テーブルを自動で生成しているため、列の型を変更すると失敗する
CREATE TABLE [dbo].[Table1] ( [Id] INT NOT NULL PRIMARY KEY, [Name] NVARCHAR(20) NOT NULL, [SysStart] DATETIME2 (7) GENERATED ALWAYS AS ROW START NOT NULL, [SysEnd] DATETIME2 (7) GENERATED ALWAYS AS ROW END NOT NULL, PERIOD FOR SYSTEM_TIME ([SysStart], [SysEnd]) ) WITH (SYSTEM_VERSIONING = ON(HISTORY_TABLE=[dbo].[Table1_HISTORY], DATA_CONSISTENCY_CHECK=ON))
成功する例:History テーブルを手動で生成しているので、メイン、ヒストリーテーブル両方の列の型を変更すると成功する
create table [Table1History] ( [Id] INT NOT NULL PRIMARY KEY, [Name] NVARCHAR(20) NOT NULL, [SysStart] DATETIME2 (7) NOT NULL, [SysEnd] DATETIME2 (7) NOT NULL ) GO CREATE CLUSTERED INDEX [IX_Table1History] ON [Table1History] ([SysEnd], [SysStart]) GO create table [Table1] ( [Id] INT NOT NULL PRIMARY KEY, [Name] NVARCHAR(20) NOT NULL, [SysStart] DATETIME2 (7) GENERATED ALWAYS AS ROW START NOT NULL, [SysEnd] DATETIME2 (7) GENERATED ALWAYS AS ROW END NOT NULL, PERIOD FOR SYSTEM_TIME ([SysStart], [SysEnd]) ) WITH (SYSTEM_VERSIONING = ON(HISTORY_TABLE=[dbo].[Table1History], DATA_CONSISTENCY_CHECK=ON)) GO
なんでか分からないけど、alter 文で system_versioning の設定しようとするとコンパイルエラーになるので、create 時に設定する必要あり。
Temporal Table 周りはまだ色々動き怪しい。。
定義から消したときに、削除するやつは Database Project の中での対処方法は無さそう。
手動 alter で system_versioning = off してください。
*1:ソースになくて、ターゲットにある場合に削除する