の回避策を探して:Visual Studio用SSDTで2015年避けスキーマの不一致
をSQL 2016システム・バージョン管理(時間的)のテーブルを使用しようと、私は」とき
Error: SQL71609: System-versioned current and history tables do not have matching schemes. Mismatched column: 'XXXX'.
CREATE TABLE [dbo].[Example] (
[ExampleId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[ExampleColumn] VARCHAR(50) NOT NULL,
[SysStartTime] datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
[SysEndTime] datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH (SYSTEM_VERSIONING=ON(HISTORY_TABLE=[history].[Example]))
GO
([history]
スキーマが正しくSSDTで作成されたと仮定):基本的なテーブルを定義しまし。これは、最初はうまくいきます。
私は後で変更を行う場合は、次の
CREATE TABLE [dbo].[Example] (
[ExampleId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[ExampleColumn] CHAR(50) NOT NULL, -- NOTE: Changed datatype
[SysStartTime] datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
[SysEndTime] datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH (SYSTEM_VERSIONING=ON(HISTORY_TABLE=[history].[Example]))
GO
次にビルドは、上記のエラーメッセージで失敗します。データ型、長さ、精度、位取りを変更すると、このエラーが発生します。 VARCHAR
からCHAR
およびVARCHAR(50)
からVARCHAR(51)
に変更すると、NOT NULL
をNULL
に変更してもエラーは発生しません)。Clean
を実行しても問題は解決されません。
最新のバージョンをソースコントロールにチェックインしてから、SQL Serverオブジェクトエクスプローラを開き、Projects - XXXX
フォルダを展開し、影響を受けるテーブルに移動して削除します。次に、SSDTが削除するコードをソース管理から復元する必要があります。この手順は退屈で、危険で、私がやりたいことではありません。
誰かがこれを修正する方法を見つけましたか?バグですか?
私はMicrosoft Visual Studio Professional 2015、バージョン14.0.25431.01 Update 3とSQL Server Data Tools 14.0.61021.0を使用しています。
あなたのテーブルは有効なシステムバージョンテーブルのようには見えません。それは 'PERIOD FOR SYSTEM TIME'と' PERIOD'カラムがありません - https://msdn.microsoft.com/en-us/library/mt590957。 aspx –
あなたは正しいです!私は例を構築したときにそれらを含めるのを忘れていました。私はその投稿を修正しました。 –
これは、 'ALTER TABLE'文を実行することでSQL 2016 RTMでこれを複製することはできません。どのようにあなたのスキーマを変更していますか? –